gpt4 book ai didi

虚拟调用中的 C++ 非虚拟函数调用

转载 作者:行者123 更新时间:2023-12-02 10:19:39 24 4
gpt4 key购买 nike

为什么这个程序的输出是“CLASS A”?这不是确定为B型吗?不是说 this->g() 应该调用 B 类的 g 吗?

#include <iostream>

using namespace std;

class A {
private:
void g() {
cout << "CLASS A" << endl;
}
public:
virtual void f() {
g();
}
};

class B : public A {
public:
void g() {
cout << "CLASS B" << endl;
}
};

int main() {
A* a = new B();
a->f();
}

最佳答案

Isn't this determined to be of type B?



号码 B可能是动态类型,但是 *this的静态类型是 A在其所有成员函数中。

成员函数 g不是虚拟的,因此对它的调用使用静态绑定(bind)。在静态绑定(bind)中,对象的动态类型无关紧要——只有静态类型才重要。调用非虚拟 gA 的成员函数中应该调用 A::g .

关于虚拟调用中的 C++ 非虚拟函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60788564/

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