【发布时间】:2020-07-02 10:34:44
【问题描述】:
为什么这个程序的输出是“CLASS A”? this 不是确定为 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();
}
【问题讨论】:
-
你做错了函数
virtual。g函数需要是virtual,而不是f。 -
只有
f()是虚拟的,而不是g()-g()将是早期绑定,而不是后期绑定。如果是从虚函数调用也没关系。
标签: c++ class polymorphism this virtual