1 class B 2 { 3 public: 4 //在构造函数中调用f()虚函数; 5 B() { this->f(); }; 6 virtual void f() { cout << "Executing B::f()" << endl; }; 7 8 }; 9 10 11 class D:public B 12 { 13 public: 14 D() {};//自动调用B::B(); 15 virtual void f() { cout << "Executing D::f()" << endl; }; 16 }; 17 18 void main() 19 { 20 D d; 21 cout << "Object d was created successfully." << endl; 22 d.f();//调用虚函数 23 }
结果输出:
Executing B::f();
Object d was created successfully
Executing D::f()
原因:
因为在D完全创建之前,B已经被创建。
所以先调用B的f();
D创建完后,根据动态性调用D的f();
一般和特殊的关系:
像TPerson中的Print()虚函数属于一般的,因为每个他的派生类都可以调用,产生相同的结果;
但是在派生类中再次对Print()进行了实现,那么这个函数就变得特殊了;