如何避免受保护的班级成员?

Chi*_*iel 3 c++ oop protected

我在许多讨论中都读到,有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;
}
Run Code Online (Sandbox Code Playgroud)

And*_*ong 6

如果您指的是为什么清洁代码建议避免受保护变量?,您还需要记住,这些指南适用于真实场景,其中继承层次结构通常不像Animal和Dog那样明确.对于企业级应用程序,很多开发人员都很容易在继承方面进行思考,好像它将来会带来更多的组织,但实际上变量被不加思索地抛入基类,随着时间的推移膨胀结构并侵蚀组织环境其成员.

在你的简单案例中,使用protected很好.