Ich habe in vielen Diskussionen gelesen, dass protected
Klassenmitglieder schlecht ist und ich sehe die Gründe dafür. Aber was ist die eleganteste Art und Weise, const int age
private
zu machen und das Problem zu lösen, das sich daraus ergibt?Wie vermeidet man geschützte Klassenmitglieder?
#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
Wenn Sie "Alter" privat machen, müssen Sie Accessoren hinzufügen (d. H. Holen und setzen). Aber wirst du sie dann öffentlich machen? Soll das Alter außerhalb der Tierhierarchie verändert werden? Wenn nicht, müssen Sie es schützen, und dann sind Sie wieder bei dem gleichen Problem. –
@Default, ist es nicht seltsam, Accessor-Funktionen zum Abrufen von Variablen aus einer Basisklasse zu verwenden? – Chiel