最近、友達と一緒に次のような問題がありました。基本クラスがありました:
class A {
public:
A() : foo(10) {}
virtual int getFoo() const { return foo; }
protected:
int foo;
};
友人が上記のクラスから派生したクラスを実装しました。
class B : public A {
public:
void process() { foo = 666; }
protected:
//int foo;
};
残念ながら、彼は子孫クラスにフィールドfooも追加しました(コメント行)。したがって、次のコード。
#include <iostream>
int main()
{
A* aaa= NULL;
if (1) {
B* bbb = new B;
bbb->process();
aaa = bbb;
}
std::cout << aaa->getFoo() << std::endl;
return 0;
}
印刷された10。
これは完全に再設計され、将来そのようなことが起こらないので、それは問題ではありません。
私はちょうど疑問に思っていました、あなたは(明白なゲッター/セッター以外に、それらは実際にそこにあり、 fooはプライベートでした)、子孫クラスで同じ名前の変数を宣言することを許可しない(例えばコンパイル時エラーが発生します)。
TIA!