如何避开受保护的类成员
How to avoid protected class members?
我在许多讨论中读到,拥有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;
}
如果您指的是诸如"为什么清洁代码建议避免使用受保护的变量?"中的原因?,您还需要记住,这些准则适用于现实世界中的场景,在这些场景中,继承层次结构通常不像Animal和Dog那样清晰。对于企业级应用程序,许多开发人员很容易从继承的角度来思考,就好像它会在未来带来更多的组织,但实际上,变量会被轻率地放入基类中,随着时间的推移,结构会膨胀,成员的组织环境也会受到侵蚀。
在您的简单情况下,使用protected
是可以的。
相关文章:
- C++:无法访问声明的受保护成员
- 继承和友元函数,从基类访问受保护的成员
- 为什么派生类的好友不能使用受保护的成员?
- 相同的层次结构,访问基类的受保护成员时的行为不同
- 从模板化父类中的派生内部类访问受保护的成员变量
- 在使用受保护和继承时无法访问在类中声明的私有成员
- 同一模板类但模板类型的受保护成员
- 派生类无法访问基类的受保护成员
- 继承期间受保护成员的皮条
- 访问说明符(私有/公共/受保护)如何在内部工作(限制成员访问)?
- 如何将超类的受保护成员访问到其派生类. 如果已在派生类中声明了具有相同名称的函数?
- 是否可以基于私有/受保护成员分配类枚举?
- 依赖模板基础的受保护成员
- 将派生类构造函数参数传递给受保护的成员
- 无法从派生类型的作用域访问另一个实例的受保护成员
- 为什么我无法使用受保护/私有继承访问派生实例中基类的受保护成员?
- 将对象强制转换为派生类以访问父类的受保护成员
- 使从一个基类派生的类能够使用继承的受保护成员
- 无法访问派生类函数内的基类的受保护数据成员
- 派生类如何使用基类的受保护成员