日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++中的继承--1(引出,继承方式,继承的对象模型)

發布時間:2023/11/30 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++中的继承--1(引出,继承方式,继承的对象模型) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

繼承的引出

概念:
繼承(inheritance)機制是面向對象程序設計使代碼可以復用的最重要的手段,它允許程序員在保持原有類特 性的基礎上進行擴展,增加功能,這樣產生新的類,稱派生類。繼承呈現了面向對象程序設計的層次結構, 體現了由簡單到復雜的認知過程。以前我們接觸的復用都是函數復用,繼承是類設計層次的復用。
例子:

  • 網頁 有很多公共部分

  • 導致實現時候有很多重復的代碼

  • 引出繼承,基類(父類)公共網頁

  • 具體子類(派生類),實現不同的內容

  • 語法 class 子類 :繼承方式 父類

    #include<iostream>using namespace std;//class News//{//public:// void header()// {// cout << "公共的頭部" << endl;// }//// void footer()// {// cout << "公共底部" << endl;// }// void left()// {// cout << "左側列表" << endl;// }// void content()// {// cout << "新聞播報:白百合.." << endl;// }//};//class Yule//{//public:// void header()// {// cout << "公共的頭部" << endl;// }//// void footer()// {// cout << "公共底部" << endl;// }// void left()// {// cout << "左側列表" << endl;// }// void content()// {// cout << "新聞播報:白百合.." << endl;// }//};/*void test01(){//新聞類News news;news.header();news.footer();news.left();news.content();//娛樂類Yule y1;y1.header();y1.footer();y1.left();y1.content();}*///繼承寫法//抽象一個 基類的網頁 重復的代碼都寫到這個網頁上class BasePage{public:void header(){cout << "公共的頭部" << endl;}void footer(){cout << "公共底部" << endl;}void left(){cout << "左側列表" << endl;}void content(){cout << "新聞播報:白百合.." << endl;}};class News :public BasePage //繼承 News類繼承 BasePage類{public:void content(){cout << "新聞播報" << endl;}};class YULE :public BasePage{public:void content(){cout << "白百合.." << endl;}};class Game :public BasePage{public:void content(){cout << "kpl直播" << endl;}};void test02(){cout << "新聞網頁內容:" << endl;News news;news.header();news.footer();news.left();news.content();cout << "娛樂網頁內容:" << endl;YULE y1;y1.header();y1.footer();y1.left();y1.content();cout << "游戲網頁內容:" << endl;Game y2;y2.header();y2.footer();y2.left();y2.content();}//繼承 減少代碼重復內容//BasePage 基類 (父類) News 派生類 (子類)int main(){test02();system("pause");return 0;}
  • 繼承的方式

  • 不管公有繼承 ,保護,還是私有,基類中的私有屬性,都不可以繼承下去
  • 公有繼承 父類中的protected在子類中是protected,父類中的public在子類中還是public
  • 保護繼承,父類中的protected在子類中是protected,父類中的public在子類中是protected
  • 私有繼承,父類中的protected在子類中是private,父類中的public在子類中是prviate
  • 注意:

  • 基類private成員在派生類中無論以什么方式繼承都是不可見的。這里的不可見是指基類的私有成員還是 被繼承到了派生類對象中,但是語法上限制派生類對象不管在類里面還是類外面都不能去訪問它。

  • . 基類private成員在派生類中是不能被訪問,如果基類成員不想在類外直接被訪問,但需要在派生類中能 訪問,就定義為protected??梢钥闯霰Wo成員限定符是因繼承才出現的。

  • 實際上面的表格我們進行一下總結會發現,基類的私有成員在子類都是不可見?;惖钠渌蓡T在子類 的訪問方式 == Min(成員在基類的訪問限定符,繼承方式),public > protected > private。

  • 使用關鍵字class時默認的繼承方式是private,使用struct時默認的繼承方式是public,不過最好顯示的 寫出繼承方式。

  • 在實際運用中一般使用都是public繼承,幾乎很少使用protetced/private繼承,也不提倡使用 protetced/private繼承,因為protetced/private繼承下來的成員都只能在派生類的類里面使用,實際中 擴展維護性不強。

    #include<iostream> using namespace std;class Base1 { public:int m_A; protected:int m_B; private:int m_C;};//公有繼承 class Son1 : public Base1 { public:void func(){//cout << m_C << endl;//基類中私有屬性 不可繼承cout << m_A << endl; //基類中公有屬性可繼承還是publiccout << m_B << endl;//基類中保護屬性 可繼承 還是protected} };void testSon1() {Son1 s1;s1.m_A;//s1.m_B; 類外訪問不了protected屬性 }//--------------------------保護繼承-------------class Base2 { public:int m_A; protected:int m_B; private:int m_C;};class Son2 :protected Base2 { public:void func(){//cout << m_C << endl;//基類中私有屬性 不可繼承cout << m_A << endl; //基類中公有屬性可繼承還是protectedcout << m_B << endl;//基類中保護屬性 可繼承 還是protected} }; void func2() {Son2 s;//s.m_A;//保護繼承類外不可訪問} //--------------------------私有繼承------------- class Base3 { public:int m_A; protected:int m_B; private:int m_C; };class Son3 :private Base3 { public:void func(){//cout << m_C << endl;//基類中私有屬性 不可訪問cout << m_A << endl;//基類中公有屬性 可繼承 還是private} };class GrandSon3 :public Son3 { public:void myFunc(){;//cout << m_A << endl;//孫子類中 訪問不到m_A,因為在Son3中m_A已經是私有屬性了} };int main() {system("pause");return 0;}
  • 繼承中的對象模型

  • 子類中會繼承父類中所有的內容,包括了私有屬性

  • 只是我們訪問不到,編譯器給隱藏了

    #include<iostream>using namespace std;class Base{public:int m_A;protected:int m_B;private:int m_C;};//子類中 會繼承父類的私有成員 只是被編譯器給隱藏起來,訪問不到私有成員class Son :public Base{public:int m_D;};void test01(){cout << sizeof(Son) << endl;//大小為16,基類中的私有成員也在子類中被繼承,只是無權訪問}int main(){test01();system("pause");return 0;}
  • 總結

    以上是生活随笔為你收集整理的c++中的继承--1(引出,继承方式,继承的对象模型)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 99这里精品| 跪求黄色网址 | 91免费网站视频 | 国产盗摄一区二区三区 | 午夜国产福利在线观看 | 亚瑟av在线 | 欧美三级视频在线观看 | 99久久综合国产精品二区 | 操碰视频在线 | 理论片第一页 | 日韩av二区 | 九色91popny蝌蚪新疆 | 天天干,夜夜操 | 大吊一区二区三区 | 精品91久久久| 国产视频观看 | 国产乱人乱精一区二视频国产精品 | 精品丝袜一区 | 综合久久久久久久久久久 | 欧美3p视频 | 亚洲综合色站 | 国产精品第 | 四虎黄色影院 | 奇米婷婷 | 国产一区二区三区在线观看 | 丰满熟女人妻一区二区三区 | 欧美巨大乳 | 学生调教贱奴丨vk | 少妇一区二区三区四区 | 亚洲18在线看污www麻豆 | 国产一级免费片 | 丝袜高跟av| 日本在线视频一区 | 天堂在线资源网 | 免费观看一区二区三区 | 激情五月在线 | 日韩视频在线免费 | 日韩欧美aⅴ综合网站发布 国产成人一区二区三区小说 | 久久黄色一级片 | 免费看黄色网 | 黄色性情网站 | 四虎精品在线 | 91在线免费视频观看 | 亚洲免费国产视频 | 91久热| 国内视频一区 | 成人免费在线观看av | 久久99国产精品视频 | 婷婷综合激情网 | 99久久精品免费 | 影音先锋国产在线 | 精品日日夜夜 | 久久高清无码视频 | av色图在线 | 男女做的视频 | 狼性av懂色av禁果av | 久久精品国产精品亚洲色婷婷 | 天天鲁 | 色婷婷aⅴ一区二区三区 | 国产精品三级久久久久久电影 | 波岛野结衣 | 国产高潮网站 | 激情福利在线 | 国产午夜精品久久 | 国产中文在线视频 | 国产黄色一区二区 | 99在线播放| 狠狠干青青草 | 制服.丝袜.亚洲.中文.综合懂色 | 欧美精品一区在线观看 | 18男女无套免费视频 | 国产女教师一区二区三区 | 亚洲天堂av电影 | 天天舔天天舔 | 久久国产精品一区二区三区 | 中文在线资源天堂 | 国产色图片 | 久草最新网址 | 欧美成人一级片 | 日韩欧美在线视频播放 | 成人av在线看 | 国产成人资源 | 男人的网址 | 成人午夜激情影院 | 国产成人精品电影 | 91精品国产综合久久久蜜臀 | 国产精品suv一区二区三区 | av日日夜夜 | 都市激情亚洲 | 亚洲成人网络 | bbbbbbbbb毛片大片按摩 | 九九热re| 婷婷综合亚洲 | 亚洲色图15p | 韩国电影大尺度在线观看 | 亚洲天堂免费av | 无码一区二区三区在线观看 | 91国内在线| 久色|