繼承與虛函數重載

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章