继承抄袭C++中的多态?

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)

Bri*_*ndy 9

virtual关键字不会帮助你在这里.

您的基类Base::f被派生类型隐藏.您需要执行以下操作:

class Child: public Base {
  public:
    using Base::f;
    void f( Y* ) {}
};
Run Code Online (Sandbox Code Playgroud)

Parashift更详细.

  • 是的,名称查找在重载解析之前发生,因此`Base :: f`不会被认为是重载而没有明确地将它们拉出来. (2认同)