色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C++中類的繼承訪問級別學習總結(二)

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2020-12-24 16:10 ? 次閱讀

上一篇文章我們介紹了c++中類的繼承學習總結;今天我們繼續來分享c++中類的繼承中的訪問級別的學習總結。

一、繼承中的訪問級別學習:

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

從面向對象理論角度來看:

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

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

輸出結果:

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、繼承中的訪問級別關系

面向對象中的訪問級別不只是public和private

可以定義protected訪問級別

關鍵字protect的意義

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

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

代碼實現

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

運行結果:

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()函數中,使用父類和子類定義的對象,均不可以對父類中的屬性mv進行訪問,這一點要注意。

3、為什么面向對象中需要protect?

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

4、定義類時訪問級別的選擇:

注解:從圖中我們可以發現,當有發生繼承關系時,就考慮使用protect關鍵字

5、組合和繼承的綜合運用

說明:Object這個類是被用來繼承的;Line和Point兩個類進行組合。

代碼示例:

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

輸出結果:

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

二、總結:

面向對象中的訪問級別不只是public和private

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

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

protected關鍵字為了繼承而專門設計的

沒有protected關鍵字就無法完成真正代碼意義上的代碼復用了

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

審核編輯:符乾江
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 可編程邏輯
    +關注

    關注

    7

    文章

    517

    瀏覽量

    44147
  • C++
    C++
    +關注

    關注

    22

    文章

    2114

    瀏覽量

    73792
收藏 人收藏

    評論

    相關推薦

    Spire.XLS for C++組件說明

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

    EE-112:模擬C++實現

    電子發燒友網站提供《EE-112:模擬C++實現.pdf》資料免費下載
    發表于 01-03 15:15 ?0次下載
    EE-112:模擬<b class='flag-5'>C++</b><b class='flag-5'>中</b>的<b class='flag-5'>類</b>實現

    C語言和C++結構體的區別

    同樣是結構體,看看在C語言和C++中有什么區別?
    的頭像 發表于 10-30 15:11 ?336次閱讀

    ostream在c++的用法

    ostream 是 C++ 標準庫中一個非常重要的,它位于 頭文件(實際上,更常見的是通過包含 頭文件來間接包含 ,因為 包含了 和 )。 ostream 及其派生
    的頭像 發表于 09-20 15:11 ?890次閱讀

    基于OpenHarmony標準系統的C++公共基礎庫案例:SafeQueue

    1、程序簡介該程序是基于OpenHarmony的C++公共基礎庫的線程安全隊列:SafeQueue。線程安全隊列,是在dequeue的基礎上封裝std::lock_guard,以此實現線程的相關
    的頭像 發表于 08-30 12:41 ?355次閱讀
    基于OpenHarmony標準系統的<b class='flag-5'>C++</b>公共基礎<b class='flag-5'>類</b>庫案例:SafeQueue

    基于OpenHarmony標準系統的C++公共基礎庫案例:SafeStack

    1、程序簡介該程序是基于OpenHarmony的C++公共基礎庫的線程安全隊列:SafeQueue。線程安全隊列,是在dequeue的基礎上封裝std::lock_guard,以此實現線程的相關
    的頭像 發表于 08-30 12:41 ?371次閱讀
    基于OpenHarmony標準系統的<b class='flag-5'>C++</b>公共基礎<b class='flag-5'>類</b>庫案例:SafeStack

    基于OpenHarmony標準系統的C++公共基礎庫案例:SafeBlockQueue

    1、程序簡介該程序是基于OpenHarmony的C++公共基礎庫的讀寫鎖:SafeBlockQueue。線程安全阻塞隊列SafeBlockQueue,提供阻塞和非阻塞版的入隊入隊和出隊接口,并提
    的頭像 發表于 08-30 12:41 ?337次閱讀
    基于OpenHarmony標準系統的<b class='flag-5'>C++</b>公共基礎<b class='flag-5'>類</b>庫案例:SafeBlockQueue

    基于OpenHarmony標準系統的C++公共基礎庫案例:SafeStack

    安全數據容器、數據序列化等接口 各子系統的錯誤碼相關定義 2.1、添加C++公共基礎庫依賴 修改需調用模塊的BUILD.gn,在external_deps或deps添加如下
    發表于 08-21 14:51

    基于OpenHarmony標準系統的C++公共基礎庫案例:SafeQueue

    接口 安全數據容器、數據序列化等接口 各子系統的錯誤碼相關定義 2.1、添加C++公共基礎庫依賴 修改需調用模塊的BUILD.gn,在external_deps或deps添加如下
    發表于 08-21 10:56

    java子類可以繼承的什么

    Java是一種面向對象的編程語言,它支持繼承的概念。繼承是面向對象編程的三大特性之一,它允許一個(稱為子類或派生繼承另一個
    的頭像 發表于 08-20 11:02 ?1383次閱讀

    OpenHarmony標準系統C++公共基礎庫案例:HelloWorld

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

    C++實現類似instanceof的方法

    C++有多態與繼承,但是很多人開始學習C++,有時候會面臨一個常見問題,就是如何向下轉型,特別是不知道具體類型的時候,這個時候就希望C++
    的頭像 發表于 07-18 10:16 ?651次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>中</b>實現類似instanceof的方法

    使用 MISRA C++:2023? 避免基于范圍的 for 循環中的錯誤

    在前兩篇博客,我們?向您介紹了新的 MISRA C++ 標準?和?C++ 的歷史?。在這篇博客,我們將仔細研究以 C++
    的頭像 發表于 03-28 13:53 ?845次閱讀
    使用 MISRA <b class='flag-5'>C++</b>:2023? 避免基于范圍的 for 循環中的錯誤

    簡單總結一下嵌入式C++中常見的錯誤形式

    對于 C++ ,一些關鍵字只要寫在 .h 中就好,cpp 中就不用再加上了,比如 virtual、static 等關鍵字,如果在 cpp 多寫,編譯器會報錯。
    的頭像 發表于 02-23 09:40 ?557次閱讀

    c語言,c++,java,python區別

    操作系統、嵌入式系統等對性能要求較高的場景。C語言的語法相對簡單,學習曲線較平緩,也是學習其他高級語言的入門語言。 C++C++是在
    的頭像 發表于 02-05 14:11 ?2551次閱讀
    主站蜘蛛池模板: 日本精品久久久久中文字幕 1 | 亚洲黄色三级视频 | 国产h视频在线观看网站免费 | 色狠狠一区 | 国产精品系列在线观看 | 久久综合给合久久狠狠狠… | 美女被触手注入精子强制受孕漫画 | 成人国产精品视频频 | 成人在线视频播放 | 欧美性受xxxx狂喷水 | 久久伊人中文字幕有码 | 狠狠色噜噜狠狠狠狠米奇777 | 大学生第一次破苞疼哭了 | 色偷偷成人网免费视频男人的天堂 | 视频一区在线免费观看 | 6080yy 久久 亚洲 日本 | www.一级毛片 | 龙腾亚洲人成电影网站 | 青青青久久久 | 又黄又粗又爽免费观看 | 好男人好资源在线播放 | 国产成人无码精品久久久免费69 | 精品国产在线亚洲欧美 | 九九热在线视频精品店 | 久久九九有精品国产23百花影院 | 97蜜桃网123| 国产免费人成在线视频视频 | 恋夜秀场1234手机视频在线观看 | 伊人精品视频直播 | 中文字幕不卡免费高清视频 | WWW国产亚洲精品久久麻豆 | 欧美特级午夜一区二区三区 | 国产69精品久久久久乱码韩国 | 国产亚洲精品久久综合阿香 | 精品人妻一区二区三区视频53 | 早乙女由依在线观看 | 在线免费公开视频 | 国产剧果冻传媒星空在线观看 | 亚洲专区中文字幕视频专区 | 国产亚洲精品久久久久久国模美 | 久久er99热精品一区二区 |