C++之繼承(一)

來源:互聯網
上載者:User

標籤:構造順序   clu   inf   方式   父類   name   pac   ima   The   

目錄

  • C++之繼承(一)
    • 1、繼承的基本文法
    • 2、繼承的建構函式
    • 3、繼承的構造順序
    • 4、無參建構函式與預設建構函式
    • 5、繼承方式
C++之繼承(一)1、繼承的基本文法

1.1、什麼是類的繼承?

  • 類的繼承,是新的類從已有類那裡得到已有的特性。或從已有類產生新類的過程就是類的派生。原有的類稱為基類或父類,產生的新類稱為衍生類別或子類。
  • 預設的繼承方式是 private 私人繼承。一個衍生類別可以同時有多個基類,這種情況稱為多重繼承,衍生類別只有一個基類,稱為單繼承。

單繼承衍生類別
class 衍生類別名: [繼承方式] 基類名
{

};

多繼承衍生類別
衍生類別名:public 基類名 1, public 基類名 2, ...,protected 基類名 n
{

};

2、繼承的建構函式
總參數列表:子類的形參和所有基類的形參總和內嵌子物件:本質組合類別

無內嵌對象的子類建構函式
衍生類別名::衍生類別名(總參列表):基類名(參數表)
{

}

//無內嵌子物件的子類建構函式#include <iostream>using namespace std;class A{    public:    A(int a1)    {    cout<<"A()"<<endl;    }};class B: public A{    public:    B(int b1,int a1):A(a1)    {    cout<<"B()"<<endl;    }};int main(){    B b(1,2);    return 0;}//輸出://A()//B()

含內嵌子物件的子類
衍生類別名::衍生類別名(總參列表):基類名(參數表),內嵌子物件(參數表)
{

}

//含內嵌子物件的子類#include <iostream>using namespace std;class A{    public:    A(int a1)    {    cout<<"A()"<<endl;    }};class C{    public:    C(int c1)    {    cout<<"C()"<<endl;    }};class B: public A{    public:    B(int b1,int a1,int c1):A(a1),MYC(c1)    {    cout<<"B()"<<endl;    }    private:    C MYC;};int main(){    B b(1,2,3);    return 0;}//輸出://A()//C()//B()

含內嵌子物件的多繼承子類
衍生類別名::衍生類別名(總參列表):
基類名 1(參數表 1),基類名(參數名 2)....基類名 n(參數名 n),
內嵌子物件 1(參數表 1),內嵌子物件 2(參數表 2)...內嵌子物件 n(參數表 n)
{

};

//含內嵌子物件的多繼承子類#include <iostream>using namespace std;class A{    public:    A(int a1)    {    cout<<"A()"<<endl;    }};class C{    public:    C(int c1)    {    cout<<"C()"<<endl;    }};class D{    public:    D(int d1)    {    cout<<"D()"<<endl;    }};class B:public A,public C{    public:    B(int b1,int a1,int c1,int d1):A(a1),C(c1),myd(d1)    {     cout<<"B()"<<endl;    }    private:     D myd;};int main(){    B b(1,2,3,4);    return 0;}//輸出://A()//C()//D()//B()
3、繼承的構造順序

多繼承的構造順序

//多繼承的構造順序#include <iostream>using namespace std;class A{    public:    A(int a1)    {    cout<<"A()"<<endl;    }};class C{    public:    C(int c1)    {    cout<<"C()"<<endl;    }};class B:public A,public C{    public:    B(int b1,int a1,int c1):A(a1),C(c1)  //C(c1),A(c1) 程式輸出會有何不一樣呢?  答:參數列表順序改變無影響    {     cout<<"B()"<<endl;    }};int main(){    B b(1,2,3);    return 0;}//輸出://A()//C()//B()

多內嵌子物件的構造順序

//多內嵌子物件的構造順序#include <iostream>using namespace std;class A{    public:    A(int a1)    {    cout<<"A()"<<endl;    }};class C{    public:    C(int c1)    {    cout<<"C()"<<endl;    }};class B{    public:    B(int b1,int a1,int c1):MYA(a1),MYC(c1)  //MYA(a1),MYC(c1)程式輸出會有何不一樣呢?  答:參數列表順序改變無影響    {     cout<<"B()"<<endl;    }    private:    C MYC;    A MYA;};int main(){    B b(1,2,3);    return 0;}//輸出://C()//A()//B()
3.1、繼承類構造順序總結
  • a、總的建構函式的調用順序

    構造順序依次為:基類、內嵌子物件、衍生類別

  • b、多繼承的基類的建構函式執行順序為

class  A: public b ,public c  重要:決定構造順序{      A():c(),c(),b()  //無任何影響      {      }}總結: 基類的構造順序僅與子類繼承時的繼承順序有關,與建構函式的參數列表順序無關。      該樣本構造順序依次為:b c a。
  • c、多個內嵌子物件的建構函式的執行順序為
class  B{}class  C{}class  A{      A():c1(),b1()  //無任何影響      {      }   private:  重要:決定構造順序      B  b1;        C  c1; }總結: 內嵌子物件的構造順序僅與子類執行個體化對象的先後有關,與建構函式的參數列表順序無關。      該樣本構造順序依次為:b c a。
4、無參建構函式與預設建構函式
//樣本1#include <iostream>using namespace std;class A{    public:    A()    {    cout<<"A()"<<endl;    }};class C{    public:};int main(){    A a;    C c;}//輸出://A()
//樣本2:#include <iostream>using namespace std;class A{    public:    A()    {    cout<<"A()"<<endl;    }};class C{    public:};class B:public A,public C{    public:    B(int b1,int a1,int c1,int d1)    {     cout<<"B()"<<endl;    }};int main(){    B b(1,2,3,4);    return 0;}//輸出://A()//B()
4.1、無參與預設構造總結

不同點

1、預設建構函式指系統預設的隱士建構函式,不體現在使用者代碼中。當定義對象時它會隱士調用,內部可能不做任何操作。

2、無參建構函式指使用者實現的建構函式,該函數沒有參數,一旦使用者定義對象時,該函數就會得到調用。

相同點

1、無參建構函式的類與預設建構函式的類定義對象時都一致,如:B b;

5、繼承方式
  • 三種不同的繼承方式
繼承方式 屬性
public 基類的公有成員和保護成員在衍生類別中保持原有訪問屬性,其私人成員仍為基類的私人成員。
private 基類的公有成員和保護成員在衍生類別中成了私人成員,其私人成員 仍為基類的私人成員。
protected 基類的公有成員和保護成員在衍生類別中成了保護成員,其私人成員仍為基類的私人成員。
  • 公有繼承屬性描述
原基類屬性 public protected private
子類繼承方式 public public public
基類成員在子類屬性 public protected invisible

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.