如何避开受保护的类成员

How to avoid protected class members?

本文关键字:成员 受保护 何避开      更新时间:2023-10-16

我在许多讨论中读到,拥有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是可以的。