一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++中類的繼承訪問級(jí)別學(xué)習(xí)總結(jié)(二)

電子設(shè)計(jì) ? 來源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2020-12-24 16:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

上一篇文章我們介紹了c++中類的繼承學(xué)習(xí)總結(jié);今天我們繼續(xù)來分享c++中類的繼承中的訪問級(jí)別的學(xué)習(xí)總結(jié)。

一、繼承中的訪問級(jí)別學(xué)習(xí):

1、子類是否可以直接訪問父類的私用成員嗎?

從面向?qū)ο罄碚摻嵌葋砜矗?/p>

子類擁有父類的一切屬性和行為,也就是說,子類能夠直接訪問父類的私有成員。

從c++的語法角度看:

外界不能直接訪問類的private成員,也就是說,子類不能直接訪問父類的私用成員。

代碼示例:

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

輸出結(jié)果:

root@txp-virtual-machine:/home/txp# g++ test.cpp
test.cpp: In member function ‘int Child::addValue(int)’:
test.cpp:9:9: error: ‘int Parent::mv’ is private
int mv;

test.cpp:27:9: error: within this context
mv = mv + v; // 如何訪問父類的非公有成員

test.cpp:9:9: error: ‘int Parent::mv’ is private
int mv;

test.cpp:27:14: error: within this context
mv = mv + v; // 如何訪問父類的非公有成員

注解:我們可以看到子類不能直接訪問到父類里面的屬性

2、繼承中的訪問級(jí)別關(guān)系

面向?qū)ο笾械脑L問級(jí)別不只是public和private

可以定義protected訪問級(jí)別

關(guān)鍵字protect的意義

--修飾的成員不能被外界直接訪問

-- 修飾的成員可以被子類直接訪問

代碼實(shí)現(xiàn)

#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.a(chǎn)ddValue(50);

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

c.mv = 10000; // error

return 0;

運(yùn)行結(jié)果:

root@txp-virtual-machine:/home/txp# g++ test.cpp
test.cpp: In function ‘int main()’:
test.cpp:9:9: error: ‘int Parent::mv’ is protected
int mv;

test.cpp:37:8: error: within this context
p.mv = 1000; // error

test.cpp:9:9: error: ‘int Parent::mv’ is protected
int mv;

test.cpp:47:7: error: within this context
c.mv = 10000; // error

注解:這里我們把父類的屬性private修改成protect,這里我們注意到在子類里面的方法中是可以使用父類中的屬性mv了,只不過在int main()函數(shù)中,使用父類和子類定義的對(duì)象,均不可以對(duì)父類中的屬性mv進(jìn)行訪問,這一點(diǎn)要注意。

3、為什么面向?qū)ο笾行枰猵rotect?

我們還是用生活中的例子來理解,每個(gè)人的個(gè)人隱私,是不能泄露的,也就是我們c++中的private關(guān)鍵字;而你身上穿的衣服,每個(gè)人都可以知道,也就是c++中的public關(guān)鍵字;最后我們的protect關(guān)鍵字,為啥c++中會(huì)需要它,我想還是跟生活中有關(guān)(所以說,面向?qū)ο蟮?a target="_blank">編程,非常貼近生活),比如說,家庭開會(huì),有些事情就不能讓外人知道,但是自己家人就可以知道,所以這跟protect關(guān)鍵字的用法非常像,也就是說,protect關(guān)鍵鑒于private和public之間。

4、定義類時(shí)訪問級(jí)別的選擇:

注解:從圖中我們可以發(fā)現(xiàn),當(dāng)有發(fā)生繼承關(guān)系時(shí),就考慮使用protect關(guān)鍵字

5、組合和繼承的綜合運(yùn)用

說明:Object這個(gè)類是被用來繼承的;Line和Point兩個(gè)類進(jìn)行組合。

代碼示例:

#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 from " << 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;

輸出結(jié)果:

root@txp-virtual-machine:/home/txp# ./a.out
Object
Point
P(1, 2)
Line
Line from P(1, 2) to P(5, 6)

二、總結(jié):

面向?qū)ο笾械脑L問級(jí)別不只是public和private

protected修飾的成員不能別外界所訪問

protected使得子類能夠訪問父類的成員

protected關(guān)鍵字為了繼承而專門設(shè)計(jì)的

沒有protected關(guān)鍵字就無法完成真正代碼意義上的代碼復(fù)用了

好了,今天的分享就到這里,如果文章中有錯(cuò)誤或者不理解的地方,可以交流互動(dòng),一起進(jìn)步。我是txp,下期見!

審核編輯:符乾江
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 可編程邏輯
    +關(guān)注

    關(guān)注

    7

    文章

    526

    瀏覽量

    44727
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2119

    瀏覽量

    75186
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C++學(xué)到什么程度可以找工作?

    C++開發(fā)的工作不僅需要深厚的編程功底,還要具備解決實(shí)際問題的能力,以及良好的溝通能力和團(tuán)隊(duì)協(xié)作精神。此外,持續(xù)學(xué)習(xí)和更新自己的知識(shí)體系也是保持競(jìng)爭(zhēng)力的關(guān)鍵。
    發(fā)表于 03-13 10:19

    基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)庫案例:ThreadPoll

    1、程序簡(jiǎn)介該程序是基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)庫的線程池處理:ThreadPoll。本案例完成如下工作:創(chuàng)建1個(gè)線程池,設(shè)置該線程池內(nèi)部有1024個(gè)線程空間。啟動(dòng)5個(gè)線程
    的頭像 發(fā)表于 02-10 18:09 ?353次閱讀
    基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的<b class='flag-5'>C++</b>公共基礎(chǔ)<b class='flag-5'>類</b>庫案例:ThreadPoll

    Spire.XLS for C++組件說明

    Spire.XLS for C++ 是一款專業(yè)的 C++ Excel 組件,可以用在各種 C++ 框架和應(yīng)用程序。Spire.XLS for C+
    的頭像 發(fā)表于 01-14 09:40 ?611次閱讀
    Spire.XLS for <b class='flag-5'>C++</b>組件說明

    EE-112:模擬C++實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《EE-112:模擬C++實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 01-03 15:15 ?0次下載
    EE-112:模擬<b class='flag-5'>C++</b><b class='flag-5'>中</b>的<b class='flag-5'>類</b>實(shí)現(xiàn)

    C語言和C++結(jié)構(gòu)體的區(qū)別

    同樣是結(jié)構(gòu)體,看看在C語言和C++中有什么區(qū)別?
    的頭像 發(fā)表于 10-30 15:11 ?751次閱讀

    ostream在c++的用法

    ostream 是 C++ 標(biāo)準(zhǔn)庫中一個(gè)非常重要的,它位于 頭文件(實(shí)際上,更常見的是通過包含 頭文件來間接包含 ,因?yàn)?包含了 和 )。 ostream 及其派生
    的頭像 發(fā)表于 09-20 15:11 ?1905次閱讀

    基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)庫案例:SafeQueue

    1、程序簡(jiǎn)介該程序是基于OpenHarmony的C++公共基礎(chǔ)庫的線程安全隊(duì)列:SafeQueue。線程安全隊(duì)列,是在dequeue的基礎(chǔ)上封裝std::lock_guard,以此實(shí)現(xiàn)線程的相關(guān)
    的頭像 發(fā)表于 08-30 12:41 ?668次閱讀
    基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的<b class='flag-5'>C++</b>公共基礎(chǔ)<b class='flag-5'>類</b>庫案例:SafeQueue

    基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)庫案例:SafeStack

    1、程序簡(jiǎn)介該程序是基于OpenHarmony的C++公共基礎(chǔ)庫的線程安全隊(duì)列:SafeQueue。線程安全隊(duì)列,是在dequeue的基礎(chǔ)上封裝std::lock_guard,以此實(shí)現(xiàn)線程的相關(guān)
    的頭像 發(fā)表于 08-30 12:41 ?680次閱讀
    基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的<b class='flag-5'>C++</b>公共基礎(chǔ)<b class='flag-5'>類</b>庫案例:SafeStack

    基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)庫案例:SafeBlockQueue

    1、程序簡(jiǎn)介該程序是基于OpenHarmony的C++公共基礎(chǔ)庫的讀寫鎖:SafeBlockQueue。線程安全阻塞隊(duì)列SafeBlockQueue,提供阻塞和非阻塞版的入隊(duì)入隊(duì)和出隊(duì)接口,并提
    的頭像 發(fā)表于 08-30 12:41 ?573次閱讀
    基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的<b class='flag-5'>C++</b>公共基礎(chǔ)<b class='flag-5'>類</b>庫案例:SafeBlockQueue

    基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)庫案例:SafeStack

    安全數(shù)據(jù)容器、數(shù)據(jù)序列化等接口 各子系統(tǒng)的錯(cuò)誤碼相關(guān)定義 2.1、添加C++公共基礎(chǔ)庫依賴 修改需調(diào)用模塊的BUILD.gn,在external_deps或deps添加如下
    發(fā)表于 08-21 14:51

    基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)庫案例:SafeQueue

    接口 安全數(shù)據(jù)容器、數(shù)據(jù)序列化等接口 各子系統(tǒng)的錯(cuò)誤碼相關(guān)定義 2.1、添加C++公共基礎(chǔ)庫依賴 修改需調(diào)用模塊的BUILD.gn,在external_deps或deps添加如下
    發(fā)表于 08-21 10:56

    java子類可以繼承的什么

    Java是一種面向?qū)ο蟮木幊陶Z言,它支持繼承的概念。繼承是面向?qū)ο缶幊痰娜筇匦灾唬试S一個(gè)(稱為子類或派生繼承另一個(gè)
    的頭像 發(fā)表于 08-20 11:02 ?2314次閱讀

    OpenHarmony標(biāo)準(zhǔn)系統(tǒng)C++公共基礎(chǔ)庫案例:HelloWorld

    1、程序簡(jiǎn)介該程序是基于凌蒙派OpenHarmony-v3.2.1標(biāo)準(zhǔn)系統(tǒng)C++公共基礎(chǔ)庫的簡(jiǎn)單案例:HelloWorld。主要講解C++公共基礎(chǔ)庫案例如何搭建和編譯。2、程序解析
    的頭像 發(fā)表于 08-13 08:23 ?840次閱讀
    OpenHarmony標(biāo)準(zhǔn)系統(tǒng)<b class='flag-5'>C++</b>公共基礎(chǔ)<b class='flag-5'>類</b>庫案例:HelloWorld

    HarmonyOS Next原生應(yīng)用開發(fā)-從TS到ArkTS的適配規(guī)則(八)

    :arkts-no-props-by-index 級(jí)別:錯(cuò)誤 ArkTS不支持動(dòng)態(tài)聲明字段,不支持動(dòng)態(tài)訪問字段。只能訪問已在聲明或者
    發(fā)表于 07-23 16:54

    C++實(shí)現(xiàn)類似instanceof的方法

    C++有多態(tài)與繼承,但是很多人開始學(xué)習(xí)C++,有時(shí)候會(huì)面臨一個(gè)常見問題,就是如何向下轉(zhuǎn)型,特別是不知道具體類型的時(shí)候,這個(gè)時(shí)候就希望C++
    的頭像 發(fā)表于 07-18 10:16 ?924次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>中</b>實(shí)現(xiàn)類似instanceof的方法