47_父類和子類的同名 成員函數 處理

案例:1子類繼承父類所有成員函數 和成員變量

class Base
{
public:
    void func(void)
    {
        cout<<"父類中的void func"<<endl;
    }
    void func(int a)
    {
        cout<<"父類中的int func a = "<<a<<endl;
    }
};

class Son:public Base
{
public:
    
};

void test01()
{
    //爲啥構造和析構除外?父類的構造和析構 只有父類自己知道該怎麼做(構造和析構 系統自動調用)
    //子類會繼承父類所有成員函數(構造和析構函數除外) 和成員變量
    Son ob1;
    ob1.func();//訪問的是父類的void func(void)
    ob1.func(10);//訪問的是父類的func(int a)
}

案例2:子類和父類 同名成員函數

class Base
{
public:
    void func(void)
    {
        cout<<"父類中的void func"<<endl;
    }
    void func(int a)
    {
        cout<<"父類中的int func a = "<<a<<endl;
    }
};

class Son:public Base
{
public:
    //一旦子類 實現了 父類的同名成員函數 將屏蔽所有父類同名成員函數
    void func(void)
    {
        cout<<"子類中voidfunc"<<endl;
    }
};

void test01()
{
    //爲啥構造和析構除外?父類的構造和析構 只有父類自己知道該怎麼做(構造和析構 系統自動調用)
    //子類會繼承父類所有成員函數(構造和析構函數除外) 和成員變量
    Son ob1;
    ob1.func();
    //ob1.func(10);//err //一旦子類 實現了 父類的同名成員函數 將屏蔽所有父類同名成員函數 

    //如果用戶 必須要調用父類 的同名成員函數 必須加作用域
    ob1.Base::func();//調用父類的void func
    ob1.Base::func(10);//調用父類的int func
}
int main(int argc, char *argv[])
{
    test01();
    return 0;
}

運行結果

 

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