91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++--繼承的概念和意義、繼承中的訪問級別、不同的繼承方式

發布時間:2020-07-10 13:09:58 來源:網絡 閱讀:724 作者:淡淡_小孩 欄目:編程語言

一.繼承的概念和意義

Q:類之間是否存在直接的關聯關系?
由這個問題由此聯想到生活中的例子:組合
A.組合關系:整體與部分的關系
C++--繼承的概念和意義、繼承中的訪問級別、不同的繼承方式
組合關系的描述--代碼示例

#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;
}

從該段代碼可以看出,電腦的每一個部分都是獨立的,但是在創建電腦的類時對每個部分進行了調用,期待的輸出是其它類的對象作為電腦類的成員使用
結果輸出如下
C++--繼承的概念和意義、繼承中的訪問級別、不同的繼承方式
組合關系的特點
1.將其它類的對象作為當前類的成員使用
2.當前類的對象與成員對象的生命周期相同
3.成員對象在用法上與普通對象完全一致

B.繼承關系:父子關系
C++--繼承的概念和意義、繼承中的訪問級別、不同的繼承方式
面向對象中的繼承指類之間的父子關系
1.子類擁有父類的所有屬性和行為
2.子類就是一種特殊的父類
3.子類對象可以當作父類對象使用
4.子類中可以添加父類沒有的方法和屬性
繼承關系的代碼描述

#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;
}

運行結果
C++--繼承的概念和意義、繼承中的訪問級別、不同的繼承方式
由運行的結果可以發現在子類中沒有定義 成員函數void method(),但是輸出的結果中卻有mv的值,這是因為繼承關系的優點--子類擁有父類的所有屬性和行為
同時須知道--子類就是一個特殊的父類,子類對象可以直接初始化父類對象,子類對象可以直接賦值給父類對象
繼承的意義--繼承是C++中代碼復用的重要手段。通過繼承,可以獲得父類的所有功能,并且可以在子類中重寫已有功能,或者添加新功能

二.繼承中的訪問級別

Q:子類是否可以直接訪問父類的私有成員?
C++--繼承的概念和意義、繼承中的訪問級別、不同的繼承方式
代碼驗證


#include <iostream>
#include <string>

using namespace std;

class Parent
{
private:
    int mv;
public:
    Parent()
    {
        mv = 100;
    }

    int value()
    {
        return mv;
    }
};

class Child : public Parent
{
public:
    int addValue(int v)
    {
        mv = mv + v;   
    }
};

int main()
{   
    return 0;
}

根據上面的繼承關系--子類擁有父類的所有屬性和行為,我們可以期待在子類的 int addValue(int v)的成員函數中對父類的私有成員變量mv進行改動
運行結果
C++--繼承的概念和意義、繼承中的訪問級別、不同的繼承方式
從運行的結果我們可以得知,子類的int addValue(int v)成員函數出錯,提示mv是父類私有成員變量,不能對其進行訪問,這與我們期待的結果不一樣,所以在子類對父類的修飾的私有成員進行訪問有了一種新的訪問級別--protected
繼承中的訪問級別
1.面向對象中的訪問級別不只是public和private
2.可以定義protected訪問級別
3.關鍵字protected的意義--修飾的成員不能被外界直接訪問,修飾的成員可以被子類直接訪問
代碼示例--protected的運用

#include <iostream>
#include <string>

using namespace std;

class Parent
{
protected:
    int mv;
public:
    Parent()
    {
        mv = 100;
    }

    int value()
    {
        return mv;
    }
};

class Child : public Parent
{
public:
    int addValue(int v)
    {
        mv = mv + v;    
    }
};

int main()
{   
    Parent p;

    cout << "p.mv = " << p.value() << endl;

    // p.mv = 1000;    // error

    Child c;

    cout << "c.mv = " << c.value() << endl;

    c.addValue(50);

    cout << "c.mv = " << c.value() << endl;

    // c.mv = 10000;  // error

    return 0;
}

運行結果
C++--繼承的概念和意義、繼承中的訪問級別、不同的繼承方式
但是當我們在int main中對mv進行修改時得到的運行結果
C++--繼承的概念和意義、繼承中的訪問級別、不同的繼承方式C++--繼承的概念和意義、繼承中的訪問級別、不同的繼承方式
可以看到在子類的外部不允許對父類的私有成員變量進行修改
由以上的兩個實例我們可以一張圖片來完全表示繼承關系
C++--繼承的概念和意義、繼承中的訪問級別、不同的繼承方式
小結
1.面向對象的訪問級不只是public和private
2.protected修飾的成員不能被外界所訪問
3.protected使得子類能夠訪問父類的成員
4.protected關鍵字是為了繼承而專門設計的
5.沒有protected就無法完成真正意義上的代碼復用

三.C++中支持三種不同的繼承方式
1.public繼承--父類成員在子類中保持原有訪問級別
2.private繼承--父類成員在子類中變私有成員
3.protected繼承--父類中的公有成員變為保護成員,其它成員保持不變

C++--繼承的概念和意義、繼承中的訪問級別、不同的繼承方式

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平山县| 南宫市| 修武县| 肇州县| 宣化县| 姜堰市| 榕江县| 阳谷县| 佛山市| 永春县| 朝阳区| 河北区| 陇西县| 嘉黎县| 临沂市| 集安市| 屯门区| 那坡县| 临城县| 乌恰县| 榆树市| 剑川县| 汽车| 汝阳县| 潍坊市| 岢岚县| 屯留县| 平顺县| 五莲县| 石河子市| 稷山县| 奉化市| 邛崃市| 邢台县| 高淳县| 黔西| 神农架林区| 十堰市| 兰考县| 章丘市| 通道|