Pergunta

Ouvi dizer que em C ++, usando um acessor (get...()) em uma função de membro da mesma classe onde o acessor foi definido é boa prática de programação? É verdade e deve ser feito?

Por exemplo, isso é preferido:

void display() {
    cout << getData();
}

sobre algo como isto:

void display() {
    cout << data;
}

data é um membro de dados da mesma classe, onde o acessor foi definida ... mesmo com o método display().

Estou pensando em sobrecarga para fazer isso, especialmente se você precisa invocar os lotes de assessor de vezes dentro da mesma classe, em vez de apenas usando o membro de dados diretamente.

Foi útil?

Solução

A razão para isto é que se você alterar a implementação de getData(), você não terá que mudar o resto do código que acessa diretamente data.

E também, um compilador inteligente irá inline de qualquer maneira (ele sempre saberia a implementação dentro da classe), então não há nenhuma penalidade de desempenho.

Outras dicas

Depende. Utilizando uma função de acesso fornece uma camada de abstracção, o que poderia fazer alterações futuras para menos dolorosa 'Dados'. Por exemplo, se você queria calcular preguiçosamente o valor de 'dados', você poderia esconder que a computação na função de assessor.

Como para a sobrecarga - Se você está se referindo a sobrecarga de desempenho, ele provavelmente será insignificante - seus acessores quase certamente ser embutido. Se você está se referindo a codificação em cima, então sim, é uma troca, e você terá que decidir se vale a pena o esforço extra para fornecer acessores.

Pessoalmente, eu não acho que os acessores valem a pena na maioria dos casos.

Sim, eu acho que deveria ser feito mais ou menos incondicionalmente. Se a variável de estado é, de alguma classe base deve mais ou menos sempre ser privado. Se você permitir que ele seja protegido ou público, todos herdados irá usá-lo diretamente. Essas classes, por sua vez pode ser classes seus colegas de trabalho tem sido escrito em algum outro projeto. Se você de repente decide zombar sobre na classe base e refatorar por exemplo o nome da variável para algo mais adequado, todos os usuários desse Estado deve ser reescrito.

Isto provavelmente não é um problema se você é o único programador ou desenvolver algum código que ninguém nunca vai usar. Mas assim que o número de sub aulas começam a crescer, ele pode ficar muito peludo. transparência precisar amor!

No entanto, eu não sou deuses melhor criança neste planeta. Às vezes eu enganar;) Quando você está na classe proprietário, eu acho que é ok para acesso a dados privados diretamente. Pode até ser benéfica, desde que você sabe automaticamente que você está modificando a classe real que você está dentro. Uma vez que você tem algum tipo de convenção de nomenclatura que realmente diz-lhe assim, por exemplo, algum nome variável com um sublinhado no final: "someVariable _"

Felicidades!

Bem, Sr. Khunt, a sobrecarga é muito insignificante para acessores na maioria dos casos. A questão é se não a lógica acessor precisa ser invocado, ou o que você precisa acesso direto para o campo. Esta é uma pergunta para cada aplicação individual, mas em muitos casos, não vai fazer muita diferença.

A verdadeira razão para acessores é fornecer encapsulamento de seus campos para outras classes -. E menos sobre a classe contendo

Pessoalmente, eu prefiro não ter dezenas de funções extras (obter e definir por cada variável de membro). Gostaria apenas de usar dados , e mudaria a getData () apenas quando necessário para fazer algo diferente. Já que estamos falando sobre como alterar o código em apenas uma classe, ele não deve ser muito difícil.

Depende do que você pode em última análise, faz com o seu membro de dados suponho.

Por envolvendo-o no acessor então você pode fazer coisas como preguiçosamente recuperar os dados se este era um processo caro e não algo que você quer fazer, a menos que alguém pede. Por outro lado, você pode saber que ele sempre será um burro built-in tipo e por isso não posso ver qualquer vantagem de passar por um assessor lá. Como eu disse, isso depende do membro.

Para mim, o aspecto mais importante desta questão é que isso tornar o código mais legível e, portanto, passível de manutenção? Pessoalmente eu não acho que ele faz, então eu não faria isso.
Certamente você nunca deve adicionar um acessador particular só para fazer isso, que seria cnuts.

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