c++繼承總結

來源:互聯網
上載者:User

標籤:int   tracking   use   父類繼承   賦值   同名   含義   函數調用   each   

繼承
1)繼承是物件導向程式設計實現軟體重用的重要方法。程式猿能夠在已有基類的基礎上定義新的衍生類別。
2) 單繼承的衍生類別僅僅有一個基類。多繼承的衍生類別有多個基類。


3) 衍生類別對基類成員的訪問由繼承方式和成員性質決定。


4) 建立衍生類別對象時,先調用基類建構函式初始化衍生類別中的基類成員。調用解構函式的次序和調用建構函式的次序相反。
5)C++提供虛繼承機制,防止類繼承關係中成員訪問的二義性。
6) 多繼承提供了軟體重用的強大功能。也添加了程式的複雜性。

衍生類別類成員訪問層級
1、須要被外界訪問的成員直接設定為public
2、僅僅能在當前類中訪問的成員設定為private
3、僅僅能在當前類和子類中訪問的成員設定為protected。protected成員的訪問許可權介於public和private之間。

//類的繼承方式對子類對外訪問屬性影響#include <cstdlib>#include <iostream>using namespace std;class A{private:    int a;protected:    int b;public:    int c;    A()    {        a = 0;        b = 0;        c = 0;    }    void set(int a, int b, int c)    {        this->a = a;        this->b = b;        this->c = c;    }};class B : public A{public:    void print()    {        //cout<<"a = "<<a; //err        cout<<"b = "<<b;        cout<<"c = "<<endl;    }};class C : protected A{public:    void print()    {        //cout<<"a = "<<a; //err        cout<<"b = "<<b;        cout<<"c = "<<endl;    }};class D : private A{public:    void print()    {        //cout<<"a = "<<a; //err        cout<<"b = "<<b<<endl;         cout<<"c = "<<c<<endl;     }};int main_01(int argc, char *argv[]){    A aa;    B bb;    C cc;    D dd;    aa.c = 100; //ok    bb.c = 100; //ok    //cc.c = 100; //err 類的外部是什麼含義    //dd.c = 100; //err    aa.set(1, 2, 3);    bb.set(10, 20, 30);    //cc.set(40, 50, 60); //ee    //dd.set(70, 80, 90); //ee    bb.print();    cc.print();    dd.print();    system("pause");    return 0;}

類型相容性原則
子類對象能夠當作父類對象使用
子類對象能夠直接賦值給父類對象
子類對象能夠直接初始化父類對象
父類指標能夠直接指向子類對象
父類引用能夠直接引用子類對象

#include <cstdlib>#include <iostream>using namespace std;//子類就是特殊的父類class Parent03{protected:    const char* name;public:    Parent03()    {        name = "Parent03";    }    void print()    {        cout<<"Name: "<<name<<endl;    }};class Child03 : public Parent03{protected:    int i;public:    Child03(int i)    {        this->name = "Child2";        this->i = i;    }};int main(){    Child03 child03(1000);    //分別定義父類對象 父類指標 父類引用 child    Parent03 parent = child03;    Parent03* pp = &child03;    Parent03& rp = child03;    parent.print();    pp->print();    rp.print();    system("pause");    return 0;}

繼承中構造和析構
在子類物件建構時。須要調用父類建構函式對其繼承得來的成員進行初始化
在子類對象析構時。須要調用父類解構函式對其繼承得來的成員進行清理

#include <cstdlib>#include <iostream>using namespace std;class Parent04{public:    Parent04(const char* s)    {        cout<<"Parent04()"<<" "<<s<<endl;    }    ~Parent04()    {        cout<<"~Parent04()"<<endl;    }};class Child04 : public Parent04{public:    Child04() : Parent04("Parameter from Child!")    {        cout<<"Child04()"<<endl;    }    ~Child04()    {        cout<<"~Child04()"<<endl;    }};void run04(){    Child04 child;}int main_04(int argc, char *argv[]){    run04();    system("pause");    return 0;}

1、子類對象在建立時會首先調用父類的建構函式
2、父類建構函式運行結束後,運行子類的建構函式
3、當父類的建構函式有參數時,須要在子類的初始化列表中顯示調用
4、解構函式調用的先後順序與建構函式相反

繼承中的同名成員變數
1、當子類成員變數與父類成員變數同名時
2、子類依舊從父類繼承同名成員
3、在子類中通過範圍分辨符::進行同名成員區分(在衍生類別中使用基類的同名成員,顯式地使用類名限定符)
4、同名成員儲存在記憶體中的不同位置

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.