Я читал во многих дискуссиях, что у членов класса protected
плохо, и я вижу причины этого. Но с учетом приведенного ниже примера, что является самым элегантным способом сделать const int age
private
и решить проблему, которая возникает из-за этого?Как избежать защищенных членов класса?
#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
Если вы делаете 'age' private, вам нужно добавить аксессоров (т. Е. Получить и установить). Но тогда вы сделаете их публичными? Предполагается, что возраст должен быть изменен вне иерархии животных? Если нет, вы должны защитить его, а затем вернуться к той же проблеме. –
@Default, не странно ли использовать функции доступа для извлечения переменных из базового класса? – Chiel