gpt4 book ai didi

具有方法重写的 C++ 继承

转载 作者:行者123 更新时间:2023-11-28 02:59:12 25 4
gpt4 key购买 nike

C++ 继承的非常简单的例子:

#include <iostream>
using namespace std;

class A{
public :
virtual void print(A a){
cout<<"a"<<endl;
}
};
class B : public A {
public :
virtual void print(A a){
cout<<"a2"<<endl;
}
virtual void print(B b){
cout<<"b"<<endl;
}
};

int main(){
B b;
A &a = b;
a.print(b);
return 0;
}

为什么输出a2?我原以为这实际上与以下内容相同: b.print(b)谢谢!

最佳答案

因为您的引用是 A 类型,所以在决定调用什么时只会考虑 A 方法。由于 print(A) 是虚拟的,它实际上会调用 B 中与 A 中的签名相匹配的方法。

如果这令人困惑,请考虑您是否已将方法 foo 添加到 B。如果您尝试调用 a.foo() 会发生什么?它会失败,因为 A 类型的对象没有 foo 方法。

关于具有方法重写的 C++ 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21274013/

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