struct MyA {
virtual void f() {
std::cout << "10" << std::endl;
}
public:
MyA() {
f();
}
};
struct MyB : public MyA {
void f() override {
std::cout << "20" << std::endl;
}
};
int main() {
MyB b;
}
程序输出是啥?
答案是10,这是因为在构造函数中调用虚函数时,对象的类型被视为构造函数所属类的类型,而不是实际创建的对象的类型。因此,当MyA的构造函数调用f()时,它调用的是MyA的f(),而不是MyB的f()。这就是为什么输出是"10",而不是"20"。