Pergunta

funções de membro

eu vi programado dentro da classe a que pertencem e fora da classe com um interior protótipo função da classe. Só tenho alguma vez programado usando o primeiro método, mas queria saber se é melhor prática para usar o outro ou apenas pessoal preferência?

Foi útil?

Solução

Assumindo que você média C ++, é sempre melhor para definir funções fora da classe, porque se você colocá-lo dentro da classe, compilador pode tentar inline, o que nem sempre é desejável:

  1. Aumento do tamanho do código (cada arquivo objeto que inclui este cabeçalho pode acabar com uma cópia da função em seu código).
  2. quebrar a compatibilidade binária quando alterações de definição de função.

Mesmo com funções inline, é normalmente melhor colocar definições fora da classe para melhorar a legibilidade da interface pública da classe, a menos que a função é um acessor trivial ou algum outro one-liner.

Outras dicas

Para C ++, colocando definições de métodos nos meios de arquivo de cabeçalho que tudo o que inclui um determinado cabeçalho deve ser recompilados quando as alterações de cabeçalho - mesmo que seja apenas um detalhe de implementação.

Mover definições fora dos meios de cabeçalho que os arquivos que incluem o cabeçalho terá de ser recompilados somente quando o próprio cabeçalho muda (funções adicionadas / removidas, ou declarações alterado). Isso pode ter um grande impacto sobre tempos de compilação para projetos complexos.

Há vantagens para ambas as técnicas.

Se você colocar apenas protótipos na definição da classe, que torna mais fácil para alguém que está usando sua classe para ver o que estão disponíveis métodos. Eles não se distraiam com detalhes de implementação.

Colocar o código diretamente na definição de classe torna mais simples para usar a classe, você só tem que # incluir um cabeçalho. Isto é especialmente útil (necessário) com as classes templated.

Presumindo a linguagem é C ++:

A linha inferior é que é preferência pessoal. Dentro da classe é mais curto global e mais direta, especialmente para o

int getFoo() const { return _foo; }

tipo de função. Fora te classe, pode remover "desordem" da definição de classe.

Eu tenho visto tanto em uso ...

Claro, funções não-inline estão sempre fora da classe.

Também é comum para misturar os dois estilos ao definir uma classe. Para os métodos simples consistindo de 1 ou 2 linhas é comum e conveniente para definir o corpo do método abrangido pela definição de classes. Para mais métodos longas é melhor defini-los externamente. Você terá definições de classe mais legíveis sem encher-los com o corpo do método.

Ocultar a implementação de um método é benéfico em que o usuário da classe não vai se distrair com a implementação real, ou suposições fazer sobre a implementação dessa mudança poder em um momento posterior.

Eu suponho que você está falando de C ++.

Ter uma interface agradável e limpo é certamente uma boa idéia. Ter um arquivo de implementação separada ajuda a manter a sua interface limpa.

Além disso, reduz o tempo de compilação, especialmente se você estiver usando um opaca ponteiro .

Se você implementar a função dentro da classe, você não pode # incluir a classe em vários arquivos .cpp ou o vinculador irá queixar-se várias definições da função.

Assim, a prática usual é a de ter a definição de classe em um arquivo .h ea implementação membros em um arquivo .cpp (geralmente com o mesmo nome).

Mais uma vez, assiming C ++, eu geralmente restringem isso para espaços reservados em funções virtuais, por exemplo.

virtual int MyFunc() {}  // Does nothing in base class, override if needed

Qualquer outra coisa, e de Andrew Medico ponto entra em ação com muita facilidade e fere tempos de compilação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top