繼承與虛函數重載
基類的指針可指向派生類或基類,運行過程中調用的函數取決於指針綁定的對象類型(多態)。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