最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++非繼承時函數(shù)成員訪問屬性和類繼承過程中的訪問控制

 更新時間:2022年03月11日 09:20:37   作者:機器學習入坑者  
這篇文章主要介紹了C++非繼承時函數(shù)成員訪問屬性和類繼承過程中的訪問控制,非繼承時,protected成員和private成員沒有任何區(qū)別,都是類內(nèi)部可以直接訪問它們、類外部的類對象不可訪問它們、類內(nèi)部的類對象可以訪問它們,更多詳細內(nèi)容請參考下面相關(guān)資料

一、非繼承時public、protected和private成員的訪問屬性

C++中保護成員使用protected進行聲明,那么protected、public和private三者有什么區(qū)別呢?

先說結(jié)論:非繼承時,protected成員和private成員沒有任何區(qū)別,都是類內(nèi)部可以直接訪問它們、類外部的類對象不可訪問它們、類內(nèi)部的類對象可以訪問它們;相比之下,public成員在類內(nèi)部、類外部的類對象、類內(nèi)部的類對象中都是可直接訪問的。

下面定 義的Bird類:

class Bird {
public:
?? ?Bird() {?
?? ??? ?eat(); ? // 正確,類內(nèi)可以訪問保護成員
?? ?};
protected:
?? ?void eat() { printf("Bird eating \n"); }
};

上述代碼表明,類內(nèi)是可以直接訪問protected成員的,下面來看類外部的類對象:

int main() {
?? ?Bird bird();
?? ?bird.eat(); ?// 錯誤,protected成員類外部對象不可訪問
}

上述代碼表明,類外部類對象是不能直接訪問protected成員的。

所以說,非繼承時protected成員和private成員沒有差別。它們真正展示出差異是在“基類和子類的繼承”時,具體分析留在后面日志。

重點:上述分析強調(diào)了“類外部的類對象和類內(nèi)部的類對象”是不同的(類內(nèi)部類對象是指:Bird類的復制構(gòu)造函數(shù)就使用Bird類對象的引用可以訪問其私有成員和保護成員)。因此,才要特殊指明“類外部的類對象不能訪問protected和private成員,類內(nèi)部的類對象可以訪問其protected和private成員”。

二、C++類繼承過程中訪問控制

在子類繼承父類的過程中,子類可以指定以何種方式繼承父類:public繼承、protected繼承和private繼承,這個過程可以稱為“訪問控制”。

在學習訪問控制之前,需要知道類含有三種成員public成員、protected成員、private成員。在非繼承的情況下,這三種成員的訪問屬性是不同的:public成員在類內(nèi)部和外部均可被直接訪問;protected和private成員均可以被類內(nèi)部和類內(nèi)部的類對象訪問,均不能被類外部的類對象訪問。為了便于自己記憶,稱這個規(guī)則為“非繼承時三種成員的訪問法則”
此知識點的復雜性在于繼承方式有三種,每種繼承方式又對應三種成員,所以一共是九種情況。

為此,采用表格形式記錄如下:

上表中“子類吸收后”表示父類成員在子類中是何種身份(身份指:publicprotectedprivate),也就是說不同的繼承類型使得父類成員在子類中的身份不同。

比如:在protected繼承類型中,父類中的public成員對應在子類中為protected成員,此時子類內(nèi)部(指成員函數(shù)和子類對象)可以訪問該protected成員,但是子類外部的子類對象無法訪問該成員。也就是說,通過protected類型的繼承,該成員從父類中的public成員變?yōu)樽宇愔械膒rotected成員。

下面是public繼承的例子,其中父類為Animal,子類為Duck:

class Animal {
public:
?? ?Animal(int age_) { age = age_; printf("Init Animal \n");?
?? ?}

?? ?void eat() { printf("Animal eating! \n"); }
protected:
?? ?void run() { printf("Animal Running! \n"); }
private:
?? ?int age=0;
?? ?void showAge() { printf("Age is %d", age); }
};

父類Animal中分別定義了public類型的eat()函數(shù)、protected類型的run()函數(shù)、private類型的showAge()函數(shù)。子類可以通過選擇不同的繼承方式,改變這幾個函數(shù)在子類中的訪問屬性:

class Duck:public Animal {
public:
?? ?Duck(int age_) :Animal(age_) {?
?? ??? ?printf("init Duck! \n");
?? ??? ?run(); // 正確,子類內(nèi)部可以訪問基類public成員
?? ??? ?eat(); // 正確,子類內(nèi)部可以訪問基類protected成員
?? ??? ?showAge(); // 錯誤,子類內(nèi)部不可訪問基類的private成員
?? ?};
};

總結(jié):

按照自己目前的理解,不管繼承方式為public、protectedprivate三種中的哪一個,父類的private成員對應到子類中均“不可直接訪問”。此外,子類不繼承父類的構(gòu)造函數(shù)和析構(gòu)函數(shù)。

疑惑:

書中所說的“不可直接訪問”,目前自己并不知道如何間接訪問,猜測可能是采用 “get” 和 “set” 方式進行間接訪問。

到此這篇關(guān)于C++非繼承時函數(shù)成員訪問屬性和類繼承過程中的訪問控制的文章就介紹到這了,更多相關(guān)C++非繼承和類繼承訪問內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言中無符號與有符號及相加問題

    C語言中無符號與有符號及相加問題

    這篇文章主要介紹了C語言中無符號與有符號及相加問題,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • 6個變態(tài)的C語言Hello World程序

    6個變態(tài)的C語言Hello World程序

    這篇文章主要介紹了6個變態(tài)的C語言Hello World程序,需要的朋友可以參考下
    2016-05-05
  • C語言如何實現(xiàn)一些算法或者函數(shù)你知道嗎

    C語言如何實現(xiàn)一些算法或者函數(shù)你知道嗎

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)一些算法或者函數(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C++中cout輸出中文信息亂碼問題及解決

    C++中cout輸出中文信息亂碼問題及解決

    這篇文章主要介紹了C++中cout輸出中文信息亂碼問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 從零學習構(gòu)造系統(tǒng)之bazel示例詳解

    從零學習構(gòu)造系統(tǒng)之bazel示例詳解

    這篇文章主要為大家介紹了從零學習構(gòu)造系統(tǒng)之bazel示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • C語言實現(xiàn)通訊錄功能的流程與代碼

    C語言實現(xiàn)通訊錄功能的流程與代碼

    通訊錄是一個可以記錄親人、好友信息的工具,這篇文章主要為大家詳細介紹了C語言實現(xiàn)通訊錄管理,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++中std::vector的6種初始化方式

    C++中std::vector的6種初始化方式

    這篇文章主要介紹了C++中std::vector的6種初始化方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Visual?Studio?2022使用MinGW來編譯調(diào)試C/C++程序的圖文教程

    Visual?Studio?2022使用MinGW來編譯調(diào)試C/C++程序的圖文教程

    這篇文章主要介紹了Visual?Studio?2022使用MinGW來編譯調(diào)試C/C++程序,以實例來簡單介紹一下VS2022中如何使用MinGW來編譯、調(diào)試C/C++程序,需要的朋友可以參考下
    2022-08-08
  • C++超詳細講解強制類型轉(zhuǎn)換的用法

    C++超詳細講解強制類型轉(zhuǎn)換的用法

    在C++語言中新增了四個關(guān)鍵字static_cast、const_cast、reinterpret_cast和dynamic_cast。這四個關(guān)鍵字都是用于類型轉(zhuǎn)換的,類型轉(zhuǎn)換(type?cast),是高級語言的一個基本語法。它被實現(xiàn)為一個特殊的運算符,以小括號內(nèi)加上類型名來表示,接下來讓我們一起來詳細了解
    2022-06-06
  • 基于Matlab實現(xiàn)多目標粘液霉菌算法的示例代碼

    基于Matlab實現(xiàn)多目標粘液霉菌算法的示例代碼

    多目標粘液霉菌算法(MOSMA),這是最近開發(fā)的粘液霉菌算法(SMA)的多目標變體,用于處理工業(yè)中的多目標優(yōu)化問題。本文將用Matlab實現(xiàn)這一算法,需要的可以參考一下
    2022-05-05

最新評論

清远市| 彭泽县| 定边县| 夹江县| 巴林左旗| 韶关市| 连山| 大同县| 灵石县| 金华市| 永丰县| 青川县| 银川市| 东平县| 克什克腾旗| 闽侯县| 平阴县| 泗水县| 阿拉善左旗| 九台市| 麟游县| 莎车县| 潮州市| 庐江县| 菏泽市| 鞍山市| 庄河市| 贡觉县| 青神县| 铜陵市| 海盐县| 晋中市| 亚东县| 贵州省| 常宁市| 北海市| 岱山县| 无极县| 图木舒克市| 唐海县| 裕民县|