gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:46:32 25 4
gpt4 key购买 nike

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

设置(问题的平凡化):

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com