【C++】深入瞭解繼承方式基礎知識及其與訪問限定符的關係

來源:互聯網
上載者:User
繼承方式和訪問限定符的關係

三種繼承方式:

  1. 公有繼承

  2. 私人繼承

  3. 保護繼承

關係:若基類的成員函數為私人,則衍生類別對基類的私人成員是不可見的,其他的標準為選範圍小的為最終訪問限定。

保護成員限定符:一些基類成員不想被基類的對象直接存取,但需要在衍生類別中才能訪問,就定義為保護成員。保護成員限定符是因繼承才出現的。

理解隱藏

隱藏是指衍生類別的函數屏蔽了與其同名的基類函數。規則如下:

  1. 如果衍生類別的函數與基類的函數同名,但是參數不同,此時,不論有無virtual關鍵字,基類的函數將被隱藏。

  2. 如果衍生類別的函數與基類的函數同名,並且參數也相同,但是基類函數沒有virtual關鍵字,此時,基類的函數被隱藏。

衍生類別的預設成員函數

在衍生類別中如果沒有顯示定義一下六個預設成員函數,編譯系統會預設合成這六個成員函數。

  1. 建構函式

  2. 拷貝建構函式

  3. 解構函式

  4. 賦值操作符重載

  5. 取地址操作符重載

  6. const修飾的取地址操作符重載

#include<iostream>using namespace std;class person{  public:    person(const char* name)      :_name(name)    {      cout<<"person()"<<endl;    }    person(const person& p){      cout<<"person(const person& p)"<<endl;    }    person& operator=(const person& p){      cout<<"person& operator=(const person& p)"<<endl;      if(this!=&p){        _name=p._name;      }      return *this;    }    ~person(){     cout<<"~person()"<<endl;     }  protected:    string _name;};class student:public person{  public:    student(const char* name,int num)      :person(name)       ,_num(num){         cout<<"student()"<<endl;       }    student(const student& s)      :person(s)       ,_num(s._num)    {      cout<<"student(const student& s)"<<endl;    }    student& operator=(const student& s){      cout<<"student& operator=(const student& p)"<<endl;      if(this!=&s){        person::operator=(s);//必須指定域,否則會死迴圈        _num=s._num;      }      return *this;    }    ~student(){//析構的時候先清理子類,再清理父類,不需要顯示的調用      cout<<"~student()"<<endl;    }  private:    int _num;};int main(){  student s1("jack",18);  student s2(s1);  student s3("rose",16);  s1=s3;}

菱形繼承

菱形繼承存在二義性以及資料冗餘問題。

例,中繼承的資料為兩份,各不相同:

解決方案:虛繼承

在菱形的第二層添加virtual

例:

相關文章:

C#拾遺之小知識(四):繼承

C#基礎知識整理:基礎知識(2) 類

相關視頻:

千鋒C語言基礎視頻教程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.