在C ++中的构造函数中调用虚函数
从构造函数或析构函数调用的虚函数是危险的,应尽可能避免使用,因为我们调用的虚函数是从基类而不是派生类调用的。
原因是在C++中,超类是在派生类之前构造的。因此,在下面的示例中,由于必须实例化B,因此必须先实例化D。调用B的构造函数时,它还不是D,因此虚拟功能表仍具有B的副本的条目s()。
范例程式码
#include<iostream>
using namespace std;
class B {
public: B() {
s();
}
virtual void s() {
cout << "Base" << endl;
}
};
class D: public B {
public: D() : B() {}
virtual void s() {
cout << "Derived" <<endl;
}
};
int main() {
D de;
}输出结果
Base
热门推荐
10 朋友新年祝福语大全 简短
11 新年祝福语简短大方兔年
12 搬新家礼物祝福语简短
13 同学见面花束祝福语简短
14 五一假期祝福语幽默简短
15 离职欢送敬酒祝福语简短
16 对学弟的祝福语简短
17 考老师辞职祝福语简短
18 祝福语驱散霉运的话简短