成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

繼承中的訪問級別(三十七)

        我們在上篇博客中介紹了 C++ 中的繼承,那么我們想想既然是繼承了,子類是否可以直接訪問父類中的私有成員呢?根據(jù)面向對象理論:子類擁有父類的一切屬性和行為,自然子類也就能直接訪問父類的私有成員!但是根據(jù) C++ 語法:外界不能直接訪問類的 private 成員,因此子類就不能直接訪問父類的私有成員!那么到底哪種是正確的呢?我們來編程實驗下

瑪沁ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

#include <iostream>
#include <string>

using namespace std;

class Parent
{
    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;
}

        我們來編譯下看看是否可以通過

繼承中的訪問級別(三十七)

        編譯報錯了,說明我們的第二種分析是正確的。那么不是說繼承可以獲得父類的全部資源嘛,它的私有成員在子類中就不能被訪問。接下來我們就要介紹一個概念了,在面向對象中的訪問級別不只是 public 和 private,還有個 protected訪問級別。那么 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;
    
    Child c;
    
    cout << "c.mv = " << c.value() << endl;
    
    c.addValue(50);
    
    cout << "c.mv = " << c.value() << endl;
    
    return 0;
}

        我們來試下將 private 屬性換成 protected,看看編譯可以通過嗎?

繼承中的訪問級別(三十七)

        我們看到編譯通過了,也正常運行了。那么我們在 main 函數(shù)中直接給 p.mv 和 c.mv 賦值為 1000 呢?我們看看編譯結果

繼承中的訪問級別(三十七)

        我們看到編譯失敗了,因為成員變量 mv 是 protected 的,所以在外界不能直接訪問。那么為什么在面向對象中需要 protected 呢?我們來想想現(xiàn)實生活中,比如小明要去醫(yī)院看病。有些隱秘的病史,小明肯定不想讓別人知道,但是這時必須得給醫(yī)生坦白,不然沒法治病哈。這時便有了 protected 這個需求了,這個病史不是純私有的,但又不是暴露在大眾之下的。我們面向對象的思想中,為了更完美的貼合生活,便有了 protected 這個關鍵字。那么我們在定義類時訪問級別是怎樣選擇的呢?我們來看看下面這張表。注:表是由唐長老總結出來的!

繼承中的訪問級別(三十七)

        關系已經(jīng)很明確了,我就不多廢話了。下來我們來看個示例,關系如下

繼承中的訪問級別(三十七)

        用程序描述出來就是下面這

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

class Object
{
protected:
    string mName;
    string mInfo;
public:
    Object()
    {
        mName = "Object";
        mInfo = "";
    }
    
    string name()
    {
        return mName;
    }
    
    string info()
    {
        return mInfo;
    }
};

class Point : public Object
{
private:
    int mX;
    int mY;
public:
    Point(int x = 0, int y = 0)
    {
        ostringstream s;
        
        mX = x;
        mY = y;
        mName = "Point";
        
        s << "P(" << mX << ", " << mY << ")";
        
        mInfo = s.str();
    }
    
    int x()
    {
        return mX;
    }
    
    int y()
    {
        return mY;
    }
};

class Line : public Object
{
private:
    Point mP1;
    Point mP2;
public:
    Line(Point p1, Point p2)
    {
        ostringstream s;
        
        mP1 = p1;
        mP2 = p2;
        mName = "Line";
        
        s << "Line form " << mP1.info() << " to " << mP2.info() << "!";
        
        mInfo = s.str();        
    }
    
    Point begin()
    {
        return mP1;
    }
    
    Point end()
    {
        return mP2;
    }
};

int main()
{
    Object o;
    Point p(1, 2);
    Point pn(5, 6);
    Line l(p, pn);
    
    cout << o.name() << endl;
    cout << o.info() << endl;
    
    cout << endl;
    
    cout << p.name() << endl;
    cout << p.info() << endl;
    
    cout << endl;
    
    cout << l.name() << endl;
    cout << l.info() << endl;

    return 0;
}

        我們看看編譯結果

繼承中的訪問級別(三十七)

        我們看到在 Object 類中沒有相應的描述,所以它的信息為空,別的打印是正確的。通過對繼承中的訪問級別的學習,總結如下:1、面向對象中的訪問級別不只是 public 和 private;2、protected 修飾的成員不能被外界訪問,它使得子類能夠訪問父類的成員;3、protected 關鍵字是為了繼承而專門設計的;4、沒有 protected 就無法完成真正意義上的代碼復用。

        歡迎大家一起來學習 C++ 語言,可以加我QQ:243343083。

本文名稱:繼承中的訪問級別(三十七)
標題網(wǎng)址:http://jinyejixie.com/article0/gcedio.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設、網(wǎng)站設計公司、做網(wǎng)站、外貿(mào)建站、企業(yè)網(wǎng)站制作、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網(wǎng)站建設
武川县| 都兰县| 普安县| 上杭县| 获嘉县| 孟津县| 永丰县| 高尔夫| 潞西市| 九龙坡区| 西林县| 杭州市| 务川| 宁远县| 馆陶县| 滁州市| 富宁县| 喀喇沁旗| 凤山县| 石林| 抚远县| 全州县| 大英县| 夏河县| 寻甸| 北宁市| 新建县| 东乡县| 嘉善县| 潜山县| 法库县| 沂源县| 唐海县| 河曲县| 华池县| 赤水市| 南澳县| 和龙市| 永吉县| 武隆县| 额尔古纳市|