c++ - 继承破坏了 C++ 中的多态性?

标签 c++ inheritance polymorphism

也许我对继承和多态性的了解并不像我想象的那样。任何人都可以解释一下吗?

设置(问题的平凡化):

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* ) {}
};

Parashift goes into more detail .

关于c++ - 继承破坏了 C++ 中的多态性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1889996/

相关文章:

c++ - 在 C++ 中意外调用析构函数

c++ - 从函数中通过引用返回 Eigen::VectorXd

c++ - 如何处理与 C++ 中的 unicode 支持相关的代码重复

html - 继承的字体大小在 Wordpress 中的段落内不起作用

java - 是否可以反/序列化 map 自身在 jackson 中的多态性?

c++ - 有充分理由类型转换兄弟类吗?

c++ - SHGetFolderPath 在分发版本中返回垃圾字符串

css - 可以:before and :after pseudo-elements inherit height from the parent element?

c++ - 为什么我的基类指针变量不能从派生类访问函数?

C# 数字基类