#include<iostream> using namespace std; class NT { public: NT(){ cout<<"NT Constructor "<<endl; } virtual void OnInit(){ cout<<"NT Init"<<endl; } int test(){ OnInit();//由于为virtual函数,所以此处执行的是BRID的OnInit方法,而不是NT的 cout<<"NT test"<<endl; return 1; } }; class BRID : public NT { public: BRID():NT(){ cout<<"BRID Constructor"<<endl; } virtual void OnInit(){ cout<<"BRID Init"<<endl; } }; int main(){ BRID b; b.test();//由于BRID没有test方法,所以调用NT的test方法 }
执行结果为
NT Constructor BRID Constructor BRID Init NT test
当BRID没有重写OnInit方法时,会调用NT的OnInit方法,即使有NT的子类重写了OnInit方法
#include<iostream> using namespace std; class NT { public: NT(){ cout<<"NT Constructor "<<endl; } virtual void OnInit(){ cout<<"NT Init"<<endl; } int test(){ OnInit(); //虽然为virtual函数,但BRID没有重写OnInit方法, //虽然BRID2有OnInit方法,但编译器不会调用BRID2的, //而是调用NT的OnInit方法 cout<<"NT test"<<endl; return 1; } }; class BRID : public NT { public: BRID():NT(){ cout<<"BRID Constructor"<<endl; } /*virtual void OnInit(){ cout<<"BRID Init"<<endl; }*/ }; class BRID2 : public NT { public: BRID2():NT(){ cout<<"BRID2 Constructor"<<endl; } virtual void OnInit(){ cout<<"BRID2 Init"<<endl; } }; int main(){ BRID b; b.test();//由于BRID没有test方法,所以调用NT的test方法 }运行结果:
NT Constructor BRID Constructor NT Init NT test