J'ai lu dans de nombreuses discussions qu'ayant protected
membres de la classe est mauvais et je vois les raisons pour cela. Mais vu l'exemple ci-dessous, quelle est la manière la plus élégante de faire const int age
private
et de résoudre le problème qui en découle?Comment éviter les membres protégés de la classe?
#include <iostream>
class Animal
{
public:
Animal(const int age) : age(age) {}
void print_age() const { std::cout << age << std::endl; }
protected:
const int age;
};
class Dog : public Animal
{
public:
Dog(const int age) : Animal(age) {}
void bark() const
{
if (age >= 1)
std::cout << "Woof!" << std::endl;
else
std::cout << "(...)" << std::endl;
}
};
int main()
{
Dog dog(1);
dog.print_age();
dog.bark();
return 0;
}
'int getAge() const {return age; } '? – Default
Si vous définissez 'age' comme privé, vous devez ajouter des accesseurs (c'est-à-dire obtenir et définir). Mais alors allez-vous les rendre publics? L'âge est-il censé être modifié en dehors de la hiérarchie animale? Sinon, vous devez le protéger, et vous revenez au même problème. –
@Default, n'est-il pas étrange d'utiliser des fonctions d'accesseur pour extraire des variables d'une classe de base? – Chiel