我在C++继承方面遇到了问题。
我有一个类层次结构:
class A {
public:
virtual void onFoo() {}
virtual void onFoo(int i) {}
};
class B : public A {
public:
virtual void onFoo(int i) {}
};
class C : public B {
};
int main() {
C* c = new C();
c->onFoo(); //Compile error - doesn't exist
}
我的问题是:为什么这个不能编译?我的理解是C应该从A继承两个onFoo函数-事实上,如果你在B中删除onFoo的重新定义,这就会编译-但是g++给出一个错误,C没有onFoo()函数。
发布于 2011-07-18 06:10:30
如果希望基类成员重载派生类成员,则需要使用using
struct A
{
virtual void onFoo() {}
virtual void onFoo(int i) {}
};
struct B : A
{
using A::onFoo;
virtual void onFoo(int i) {}
};
struct C : B
{
};
int main()
{
C* c = new C();
c->onFoo();
}
发布于 2011-07-18 06:07:32
这是名称隐藏,基本上只有声明的重载存在于B中,而A中的其他重载被隐藏。
发布于 2011-07-18 06:07:52
类A和类B上的方法应该是公共的。这样,您就会在每个类声明的结尾缺少分号。
class A {
public:
virtual void onFoo() {}
virtual void onFoo(int i) {}
};
class B : public A {
public:
virtual void onFoo(int i) {}
};
class C : public B {
};
int main() {
C* c = new C();
c->onFoo(); //Compile error - doesn't exist
}
https://stackoverflow.com/questions/6727087
复制相似问题