Em que situações é necessário escrever código em ficheiros de cabeçalho?
sobes.tech IA
Resposta da IA
Casos em que o código é escrito em ficheiros de cabeçalho:
-
Funções e classes template (Template Functions and Classes): O compilador precisa de conhecer todo o código do template para a sua especialização ao usar.
template <typename T> T max(T a, T b) { return (a > b) ? a : b; } -
Funções inline: O compilador pode substituir a chamada à função pelo seu corpo, o que requer que o código da função esteja no local da sua utilização. A palavra-chave
inlineé apenas uma recomendação ao compilador.inline int add(int a, int b) { return a + b; } -
Variáveis constantes com ligação interna (static const / constexpr): Estas variáveis geralmente são definidas e inicializadas diretamente no ficheiro de cabeçalho.
static const int MAX_SIZE = 100; constexpr double PI = 3.14159; -
Declarações e definições de membros estáticos constantes (static const member variables): Para tipos inteiros, podem ser inicializadas diretamente na declaração dentro da classe.
class MyClass { public: static const int DEFAULT_VALUE = 42; }; -
Alguns tipos de macros: Embora o uso de macros deva ser minimizado em favor de
constexpr, podem ser definidas em ficheiros de cabeçalho para propagação no projeto.#define BUFFER_SIZE 1024 -
Funções acessórias pequenas ou getters/setters: Às vezes, para melhorar o desempenho ou conveniência, funções pequenas podem ser definidas no ficheiro de cabeçalho, frequentemente com
inline implícito ou explícito.class Point { private: int x_, y_; public: int getX() const { return x_; } void setX(int x) { x_ = x; } };
A duplicação de definições de funções ou variáveis com ligação externa em ficheiros de cabeçalho leva a erros de ligação (violação da regra de uma única definição), exceto nos casos acima mencionados.