重載 覆蓋 隱藏 之解析 及 基類和父類指標的調用問題

來源:互聯網
上載者:User

很久沒寫文章,一直在看別人的部落格,今天也寫篇,一則回報各位網友的知識恩賜,二則也為 了提高自己。

聲明:由於本人知識有限,如有紕漏,直接指正,以免誤導各位!

   重載:函數名字一樣,傳回型別和參數可以不一樣,編譯器連結時,會加上參數類型檢查(c沒有函數參數類型檢查,所以C 沒有重載)

   覆蓋:出現於類的繼承中,基類的函數不起作用,注意是通過基類的指標或是引用來訪問衍生類別(虛函數的重要特性,多態的體現,RTTI技術)

   隱藏:出現於函數重載中,非虛函數可出現此情況。

 

還是代碼驗證吧,上代碼:

class firstBase
{
public:
    virtual void fun1(){cout<<"Base::fun1"<<endl;}
 void fun2(){cout<<"Base::fun2"<<endl;}
 //void fun3{cout<<"Base::fun3"<<endl;}

};

class DrivedFromBase:public firstBase
{
public :
    virtual void fun1(){cout<<"DrivedFromBase::fun1"<<endl;}
 void fun2(){cout<<"DrivedFromBase::fun2"<<endl;}
 void fun2(int x){cout<<"DrivedFromBase::fun2"<<x<<endl;}
 
 void fun3(){cout<<"DrivedFromBase::fun3"<<endl;}

};

class secondBase
{public:
    //void fun1(){cout<<"secondBase::fun1"<<endl;}
 //void fun2{cout<<"secondBase::fun2"<<endl;}
 void fun3(){cout<<"secondBase::fun3"<<endl;}

};

class DerivedFromSecondAndFirstBase:public DrivedFromBase,public secondBase
{
public:
    void g(){cout<<"DerivedFromSecondAndFirstBase::fun1"<<endl;}
 void h(){cout<<"DerivedFromSecondAndFirstBase::fun2"<<endl;}
 //void fun3{cout<<"DerivedFromSecondAndFirstBase::fun3"<<endl;}

};

繼承關係為:

firstBase->DrivedFromBase->

                                                             DerivedFromSecondAndFirstBase.    

secondBase ->

int main() 

{
 //二義性問題,非重載
 DerivedFromSecondAndFirstBase* p=new DerivedFromSecondAndFirstBase();
   // p->fun3();//此句會報錯,可能會誤認為是函數重載,但是fun3分屬於不同的類,因此無法重載,會產生二義性
   //覆蓋
    DrivedFromBase* db=new  DrivedFromBase();
    db->fun1();    //通過虛函數覆蓋基類的fun1
 //隱藏
 db->fun2(2);
 firstBase *fp=db;
 fp->fun2();//隱藏通過指標的變換是可以訪問到的,而隱藏不能

 //沒法調用
    //fp->fun3();//如果一個函數不是虛函數,沒法通過基類的指標訪問不是基類的部分,如fun3。
    return 0; 
}  

當然,這部分還是很複雜,暫時沒法從底層解釋這種現象。

 

運行結果:

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.