继承与虚函数重载
基类的指针可指向派生类或基类,运行过程中调用的函数取决于指针绑定的对象类型(多态)。deriv重载了虚函数f1,没有重载f2,deriv对象的函数指针指向deriv对象的虚函数表,base::f1()被deriv::f1()替代,base::f2()不被改变
class base{
public:
void virtual f1(){
cout<<"hi,I'm virtual f1 in base"<<endl;
}
void virtual f2(){
cout<<"hi,I'm virtual f2 in base"<<endl;
}
};
class deriv:public base{
public:
void f1(){
cout<<"hi,I'm virtual f1 in deriv"<<endl;
}
};
int main()
{
vector<int> test={4,3,5,6,7,2,1};
base* pb=new base();
base pb1;
deriv pb2;
pb=&pb1;
pb->f1();
pb->f2();
pb=&pb2;
pb->f1();
pb->f2();
}
输出:
hi,I’m virtual f1 in base
hi,I’m virtual f2 in base
hi,I’m virtual f1 in deriv
hi,I’m virtual f2 in base