Convenções para métodos de acessador (getters e setters) em C ++

Várias perguntas sobre métodos acessadores em C ++ foram feitas no SO, mas nenhuma foi capaz de satisfazer minha curiosidade sobre o assunto.

Tento evitar acessadores sempre que possível, porque, como Stroustrup e outros programadores famosos, considero uma aula com muitos deles um sinal de mau funcionamento do sistema operacional. Em C ++, na maioria dos casos, posso adicionar mais responsabilidade a uma classe ou usar a palavra-chave friend para evitá-las. No entanto, em alguns casos, você realmente precisa de acesso a alunos específicos da classe.

Existem várias possibilidades:

1. Não use acessadores

Podemos apenas tornar públicas as respectivas variáveis de membro. Isso não é permitido em Java, mas parece estar bem com a comunidade C ++. No entanto, estou um pouco preocupado com os casos em que uma cópia explícita ou uma referência somente leitura (const) a um objeto devem ser retornadas, isso é exagerado?

2. Use métodos get / set no estilo Java

Não tenho certeza se é de Java, mas quero dizer o seguinte:

int getAmount(); // Returns the amount
void setAmount(int amount); // Sets the amount

3. Use métodos objetivos de obter / definir no estilo C

Isso é um pouco estranho, mas aparentemente cada vez mais comum:

int amount(); // Returns the amount
void amount(int amount); // Sets the amount

Para que isso funcione, você precisará encontrar um nome diferente para sua variável de membro. Algumas pessoas acrescentam um sublinhado, outras acrescentam "m_". Eu também não gosto.

Qual estilo você usa e por quê?

questionAnswers(9)

yourAnswerToTheQuestion