【发布时间】:2016-07-23 07:31:19
【问题描述】:
我在许多讨论中读到拥有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; }? -
如果你将
age设为私有,那么你需要添加访问器(即获取和设置)。但是你会把它们公之于众吗?年龄是否应该在动物等级之外进行修改?如果没有,您必须对其进行保护,然后您又回到了同样的问题。 -
@Default,使用访问器函数从基类中检索变量是不是很奇怪?
-
@MariusBancila,程序中没有年龄是不变的,也没有修改。