我在许多讨论中都读过,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;
}
答案 0 :(得分:6)
如果您引用Why is Clean Code suggesting avoiding protected variables?中的原因,则还需要记住这些指南适用于真实场景,其中继承层次结构通常不是明确的作为动物和狗。对于企业级应用程序,许多开发人员很容易在继承方面进行思考,好像它将来会带来更多的组织,但实际上变量被不加思索地抛入基类,随着时间的推移使结构膨胀侵蚀其成员的组织背景。
在您的简单情况下,使用protected
就可以了。