欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

下面定 義的Bird類:

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

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

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

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

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

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

二、C++類繼承過(guò)程中訪問控制

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

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

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

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

比如:在protected繼承類型中,父類中的public成員對(duì)應(yīng)在子類中為protected成員,此時(shí)子類內(nèi)部(指成員函數(shù)和子類對(duì)象)可以訪問該protected成員,但是子類外部的子類對(duì)象無(wú)法訪問該成員。也就是說(shuō),通過(guò)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ù)。子類可以通過(guò)選擇不同的繼承方式,改變這幾個(gè)函數(shù)在子類中的訪問屬性:

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

總結(jié):

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

疑惑:

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

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

相關(guān)文章

  • C++詳細(xì)講解圖論的基礎(chǔ)與圖的儲(chǔ)存

    C++詳細(xì)講解圖論的基礎(chǔ)與圖的儲(chǔ)存

    圖論〔Graph?Theory〕是數(shù)學(xué)的一個(gè)分支。它以圖為研究對(duì)象。圖論中的圖是由若干給定的點(diǎn)及連接兩點(diǎn)的線所構(gòu)成的圖形,這種圖形通常用來(lái)描述某些事物之間的某種特定關(guān)系,用點(diǎn)代表事物,用連接兩點(diǎn)的線表示相應(yīng)兩個(gè)事物間具有這種關(guān)系
    2022-05-05
  • C/C++實(shí)現(xiàn)重置文件時(shí)間戳

    C/C++實(shí)現(xiàn)重置文件時(shí)間戳

    這篇文章主要為大家詳細(xì)介紹了C/C++實(shí)現(xiàn)重置文件時(shí)間戳的相關(guān)資料,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以參考一下
    2023-11-11
  • C語(yǔ)言實(shí)戰(zhàn)之紙牌游戲

    C語(yǔ)言實(shí)戰(zhàn)之紙牌游戲

    這篇文章主要為大家介紹了通過(guò)C語(yǔ)言實(shí)現(xiàn)的紙牌游戲的示例代碼,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C語(yǔ)言有一定的幫助,感興趣的小伙伴可以跟隨小編學(xué)習(xí)一下
    2021-12-12
  • 關(guān)于C語(yǔ)言位運(yùn)算的簡(jiǎn)單示例

    關(guān)于C語(yǔ)言位運(yùn)算的簡(jiǎn)單示例

    這篇文章主要介紹了關(guān)于C語(yǔ)言位運(yùn)算的簡(jiǎn)單示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 基于C語(yǔ)言實(shí)現(xiàn)http下載器

    基于C語(yǔ)言實(shí)現(xiàn)http下載器

    做OTA升級(jí)功能時(shí),我們能直接拿到的往往只是升級(jí)包的鏈接,需要我們自己去下載,這時(shí)候就需要用到http下載器。本文將利用C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的http下載器,感興趣的可以了解一下
    2022-12-12
  • Qt中const?QString轉(zhuǎn)換?char?*可能的坑

    Qt中const?QString轉(zhuǎn)換?char?*可能的坑

    本文主要介紹了Qt中const?QString轉(zhuǎn)換?char?*可能的坑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 純C語(yǔ)言:折半查找源碼分享

    純C語(yǔ)言:折半查找源碼分享

    這篇文章主要介紹了純C語(yǔ)言:折半查找源碼,有需要的朋友可以參考一下
    2014-01-01
  • c語(yǔ)言中字符串與字符串?dāng)?shù)組詳解

    c語(yǔ)言中字符串與字符串?dāng)?shù)組詳解

    在C語(yǔ)言當(dāng)中,字符串?dāng)?shù)組可以使用char a[] [10]; 或者char *a[]; 表示,下面這篇文章主要給大家介紹了關(guān)于c語(yǔ)言中字符串與字符串?dāng)?shù)組的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • C++編譯原理之求解First集合

    C++編譯原理之求解First集合

    這篇文章主要介紹的是C++/編譯原理求解First集合,本文將圍繞該話題詳細(xì)展開全文,需要的小伙伴可以參考一下
    2021-10-10
  • C/C++ Qt TreeWidget 嵌套節(jié)點(diǎn)操作使用

    C/C++ Qt TreeWidget 嵌套節(jié)點(diǎn)操作使用

    本文主要介紹了TreeWidget的如何使用,實(shí)現(xiàn)對(duì)樹形框多節(jié)點(diǎn)的各種操作,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11

最新評(píng)論