与朋友,最近我们遇到了以下问题。有一个基类:禁止后代类C++中的字段
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;
};
可惜的是,他还补充场富在派生类(注释行)。所以下面的代码。
#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;
}
印刷。
这不是问题,因为这将完全重新设计,这样的事情不会在将来发生。
我只是想知道,你知道任何(便携式)的技巧或语言模式(除了明显的getter/setter方法;顺便说一句,他们在那里实际上,与FOO是私有的),这将禁止声明变量在后代类中具有相同的名称(例如,通过导致编译时错误)。
TIA!
foo是不是私人的代码,它是受保护这是一个完全不同的事情 – Patrick 2010-07-28 15:59:17
AFAIK这是不可能的。期待阅读很多关于继承保护成员的知识并不是那么棒:o)我只能推荐Lint来检测这些情况...... – MaR 2010-07-28 16:05:34
'protected'可以发展成一个蠕虫罐。谨慎使用它。通常,'public'或'private'会尽可能减少可能的混淆。 – 2010-07-28 16:23:28