Chr*_*son 0 c++ polymorphism inheritance
也许我对遗传和多态性的了解并不是我想象的那样.任何人都能解释一下吗?
设置(问题的平凡化):
class X {
};
class Y {
};
class Base {
public:
void f( X* ) {}
};
class Child: public Base {
public:
void f( Y* ) {}
};
Run Code Online (Sandbox Code Playgroud)
问题:这应该有效,对吧?
int main( void ) {
X* x = new X();
Y* y = new Y();
Child* c = new Child();
c->f( x );
c->f( y );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到错误(GCC 4.4):
`no matching function for call to 'Child::f(X*&)'`
`note: candidates are: void Child::f(Y*)`
Run Code Online (Sandbox Code Playgroud)
该virtual关键字不会帮助你在这里.
您的基类Base::f被派生类型隐藏.您需要执行以下操作:
class Child: public Base {
public:
using Base::f;
void f( Y* ) {}
};
Run Code Online (Sandbox Code Playgroud)