溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

繼承的意義(三十六)

發(fā)布時(shí)間:2020-07-17 12:56:38 來(lái)源:網(wǎng)絡(luò) 閱讀:610 作者:上帝之子521 欄目:編程語(yǔ)言

        今天我們來(lái)講下 C++ 三大特性之繼承。我們首先來(lái)思考下,類與類之間是否存在直接的關(guān)聯(lián)關(guān)系呢?我們還是以之前的講解的電腦為例,說(shuō)下組合關(guān)系,組合便是整體與部分的關(guān)系,如下

繼承的意義(三十六)

        我們以這個(gè)關(guān)系為例,用代碼來(lái)描述下

#include <iostream>
#include <string>

using namespace std;

class Memory
{
public:
    Memory()
    {
        cout << "Memory()" << endl;
    }
    ~Memory()
    {
        cout << "~Memory()" << endl;
    }
};

class Disk
{
public:
    Disk()
    {
        cout << "Disk()" << endl;
    }
    ~Disk()
    {
        cout << "~Disk()" << endl;
    }
};

class CPU
{
public:
    CPU()
    {
        cout << "CPU()" << endl;
    }
    ~CPU()
    {
        cout << "~CPU()" << endl;
    }
};

class MainBoard
{
public:
    MainBoard()
    {
        cout << "MainBoard()" << endl;
    }
    ~MainBoard()
    {
        cout << "~MainBoard()" << endl;
    }
};

class Computer
{
    Memory mMem;
    Disk mDisk;
    CPU mCPU;
    MainBoard mMainBoard;
public:
    Computer()
    {
        cout << "Computer()" << endl;
    }
    void power()
    {
        cout << "power()" << endl;
    }
    void reset()
    {
        cout << "reset()" << endl;
    }
    ~Computer()
    {
        cout << "~Computer()" << endl;
    }
};

int main()
{
    Computer c;
    
    return 0;
}

        我們看到電腦是由硬盤、內(nèi)存、CPU和主板構(gòu)成的,我們看看編譯結(jié)果

繼承的意義(三十六)

        確實(shí)在生成電腦這個(gè)對(duì)象時(shí),先是生成了硬盤、內(nèi)存、CPU和主板一系列的東西,在析構(gòu)的時(shí)候順便將這些東西也都清理了。那么我們來(lái)看看組合關(guān)系的特點(diǎn)a> 將其它類的對(duì)象作為當(dāng)前類的成員使用;b> 當(dāng)前類的對(duì)象與成員對(duì)象的聲命周期相同;c> 成員對(duì)象在用法上與普通對(duì)象完全一致。

        那么繼承又是怎樣的關(guān)系呢?繼承關(guān)系通俗來(lái)講就是父子關(guān)系,如下

繼承的意義(三十六)

        面向?qū)ο笾械?span >繼承便是指類之間的父子關(guān)系,子類擁有父類的所有屬性和行為, 子類就是這一種特殊的父類。子類對(duì)象可以當(dāng)做父類對(duì)象使用,子類中可以添加父類中沒有的方法和屬性。C++ 中通過(guò)下面的方式描述繼承關(guān)系

繼承的意義(三十六)

        下來(lái)我們通過(guò)示例代碼來(lái)看看繼承

#include <iostream>
#include <string>

using namespace std;

class Parent
{
    int mi;
public:
    Parent()
    {
        cout << "Parent()" << endl;
        mi = 100;
    }
    void method()
    {
        cout << "mi = " << mi << endl;
    }
};

class Child : public Parent
{
public:
    void hello()
    {
        cout << "I'm Child calss!" << endl;
    }
};

int main()
{
    Child d;
    Child d1;
    
    Parent p = d1;

    d.hello();
    d.method();

    return 0;
}

        我們直接用類 Child 生成的對(duì)象 d 去調(diào)用類  Parent 的成員函數(shù) method,而且在第 35 行直接用對(duì)象 d1 去初始化對(duì)象 p。我們看看編譯是否會(huì)通過(guò)

繼承的意義(三十六)

        我們看到?jīng)]有報(bào)錯(cuò),并且運(yùn)行成功。我們之前說(shuō)過(guò)子類擁有父類的一切屬性,子類對(duì)象可以當(dāng)做特殊的父類對(duì)象,所以這就不難解釋了。子類對(duì)象便可以直接使用父類中的所有資源,這便有點(diǎn)類似于我們?cè)?C 語(yǔ)言中說(shuō)的代碼復(fù)用了(其實(shí)繼承的本質(zhì)就是復(fù)用父類的代碼)。那么繼承有幾條規(guī)則:a> 子類便是一個(gè)特殊的父類;b> 子類對(duì)象是可以直接初始化父類對(duì)象的;c> 子類對(duì)象可以直接賦值給父類對(duì)象。

        那么繼承的意義是什么呢?繼承是 C++ 中代碼復(fù)用的重要手段。通過(guò)繼承,可以獲得父類的所有功能,并且可以在子類中重寫已有的功能,或者添加新功能。

        下來(lái)我們?cè)偻ㄟ^(guò)一個(gè)示例代碼來(lái)加深下對(duì)繼承的理解

#include <iostream>
#include <string>

using namespace std;

class Memory
{
public:
    Memory()
    {
        cout << "Memory()" << endl;
    }
    ~Memory()
    {
        cout << "~Memory()" << endl;
    }
};

class Disk
{
public:
    Disk()
    {
        cout << "Disk()" << endl;
    }
    ~Disk()
    {
        cout << "~Disk()" << endl;
    }
};

class CPU
{
public:
    CPU()
    {
        cout << "CPU()" << endl;
    }
    ~CPU()
    {
        cout << "~CPU()" << endl;
    }
};

class MainBoard
{
public:
    MainBoard()
    {
        cout << "MainBoard()" << endl;
    }
    ~MainBoard()
    {
        cout << "~MainBoard()" << endl;
    }
};

class Computer
{
    Memory mMem;
    Disk mDisk;
    CPU mCPU;
    MainBoard mMainBoard;
public:
    Computer()
    {
        cout << "Computer()" << endl;
    }
    void power()
    {
        cout << "power()" << endl;
    }
    void reset()
    {
        cout << "reset()" << endl;
    }
    ~Computer()
    {
        cout << "~Computer()" << endl;
    }
};

class HPBook : public Computer
{
    string mOS;
public:
    HPBook()
    {
        mOS = "Windows 10";
    }
    void install(string os)
    {
        mOS = os;
    }
    void OS()
    {
        cout << mOS << endl;
    }
};

class MacBook : public Computer
{
public:
    void OS()
    {
        cout << "Mac OS" << endl;
    }
};

int main()
{
    HPBook hp;
    
    hp.power();
    hp.install("Ubuntu 16.04");
    hp.OS();
    
    cout << endl;
    
    MacBook mac;
    
    mac.OS();
    
    return 0;
}

        我們?cè)陔娔X的基礎(chǔ)上新定義了 hp 和 Mac 兩種電腦。給 hp 重裝了 Ubuntu 系統(tǒng),然后打印了它的系統(tǒng)。直接打印 Mac 電腦的系統(tǒng),看看是否如我們所愿

繼承的意義(三十六)

        確實(shí)是這樣的。通過(guò)對(duì)繼承的學(xué)習(xí),總結(jié)如下:1、繼承是面向?qū)ο笾蓄愔g的一種關(guān)系;2、子類擁有父類的所有屬性和行為;3、子類對(duì)象可以當(dāng)做父類對(duì)象使用;4、子類中可以添加父類中沒有的方法和屬性;5、繼承是面向?qū)ο笾写a復(fù)用的重要手段。


        歡迎大家一起來(lái)學(xué)習(xí) C++ 語(yǔ)言,可以加我QQ:243343083。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI