也许我对继承和多态性的了解并不像我想象的那样。任何人都可以解释一下吗?
设置(问题的平凡化):
class X {
};
class Y {
};
class Base {
public:
void f( X* ) {}
};
class Child: public Base {
public:
void f( Y* ) {}
};
问题:这应该可行,对吗?
int main( void ) {
X* x = new X();
Y* y = new Y();
Child* c = new Child();
c->f( x );
c->f( y );
return 0;
}
我得到的错误 (GCC 4.4) 是:
`no matching function for call to 'Child::f(X*&)'`
`note: candidates are: void Child::f(Y*)`
最佳答案
virtual
关键字在这里对您没有帮助。
您的基类 Base::f
被您的派生类型隐藏了。您需要执行以下操作:
class Child: public Base {
public:
using Base::f;
void f( Y* ) {}
};
关于c++ - 继承破坏了 C++ 中的多态性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1889996/