如何避免受保护的 class 成员?

How to avoid protected class members?

我在许多讨论中了解到,拥有 protected class 成员是不好的,我明白了其中的原因。但是给出下面的例子,什么是最优雅的方法来制作 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;
}

如果您指的是 Why is Clean Code suggesting avoiding protected variables? 中的原因,您还需要记住,这些指南适用于现实世界的场景,其中继承层次结构通常不像 Animal 那样清晰和狗。对于企业级应用程序,许多开发人员很容易从继承的角度来思考,好像它会在未来带来更多的组织,但实际上,变量被不加考虑地扔进了基础 class,随着时间的推移,结构变得臃肿,侵蚀其成员的组织环境。

在您的简单情况下,使用 protected 就可以了。