私は多くの議論で、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;
}
'int getAge()const {return age; } '? – Default
'age'を非公開にした場合、アクセサ(getとset)を追加する必要があります。しかし、あなたはそれを公開させますか?年齢は動物の階層の外側で修正されるはずですか?もしそうでなければ、あなたはそれを保護させなければなりません、そして、あなたは同じ問題に戻ります。 –
@Default、アクセサー関数を使用して基本クラスから変数を取得するのは奇妙なことではありませんか? – Chiel