#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