和朋友一起,我们最近遇到了以下问题。有一个基类:
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 .
这不是问题,因为这将被完全重新设计,这样的事情将来不会发生。
我只是想知道,您是否知道任何(便携式)技巧或语言模式(除了明显的 getter/setter;顺便说一句,它们实际上在那里,而foo是私有的),这将不允许在后代类中声明具有相同名称的变量(例如通过导致编译时错误)。
蒂亚!