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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

C++继承时名字的遮蔽

發(fā)布時(shí)間:2025/3/12 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++继承时名字的遮蔽 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如果派生類中的成員(包括成員變量和成員函數(shù))和基類中的成員重名,那么就會(huì)遮蔽從基類繼承過(guò)來(lái)的成員。所謂遮蔽,就是在派生類中使用該成員(包括在定義派生類時(shí)使用,也包括通過(guò)派生類對(duì)象訪問(wèn)該成員)時(shí),實(shí)際上使用的是派生類新增的成員,而不是從基類繼承來(lái)的。

成員函數(shù)的名字遮蔽:

#include<iostream> using namespace std;//基類People class People{ public:void show(); protected:char *m_name;int m_age; }; void People::show(){cout<<"嗨,大家好,我叫"<<m_name<<",今年"<<m_age<<"歲"<<endl; }//派生類Student class Student: public People{ public:Student(char *name, int age, float score); public:void show(); //遮蔽基類的show() private:float m_score; }; Student::Student(char *name, int age, float score){m_name = name;m_age = age;m_score = score; } void Student::show(){cout<<m_name<<"的年齡是"<<m_age<<",成績(jī)是"<<m_score<<endl; }int main(){Student stu("小明", 16, 90.5);//使用的是派生類新增的成員函數(shù),而不是從基類繼承的stu.show();//使用的是從基類繼承來(lái)的成員函數(shù)stu.People::show();return 0; }

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

小明的年齡是16,成績(jī)是90.5 嗨,大家好,我叫小明,今年16

本例中,基類 People 和派生類 Student 都定義了成員函數(shù) show(),它們的名字一樣,會(huì)造成遮蔽。第 37 行代碼中,stu 是 Student 類的對(duì)象,默認(rèn)使用 Student 類的 show() 函數(shù)。

但是,基類 People 中的 show() 函數(shù)仍然可以訪問(wèn),不過(guò)要加上類名和域解析符,如第 39 行代碼所示。

基類成員函數(shù)和派生類成員函數(shù)不構(gòu)成重載

基類成員和派生類成員的名字一樣時(shí)會(huì)造成遮蔽,這句話對(duì)于成員變量很好理解,對(duì)于成員函數(shù)要引起注意,不管函數(shù)的參數(shù)如何,只要名字一樣就會(huì)造成遮蔽。換句話說(shuō),基類成員函數(shù)和派生類成員函數(shù)不會(huì)構(gòu)成重載,如果派生類有同名函數(shù),那么就會(huì)遮蔽基類中的所有同名函數(shù),不管它們的參數(shù)是否一樣。

下面的例子很好的說(shuō)明了這一點(diǎn):

#include<iostream> using namespace std;//基類Base class Base{ public:void func();void func(int); }; void Base::func(){ cout<<"Base::func()"<<endl; } void Base::func(int a){ cout<<"Base::func(int)"<<endl; }//派生類Derived class Derived: public Base{ public:void func(char *);void func(bool); }; void Derived::func(char *str){ cout<<"Derived::func(char *)"<<endl; } void Derived::func(bool is){ cout<<"Derived::func(bool)"<<endl; }int main(){Derived d;d.func("c.biancheng.net");d.func(true);d.func(); //compile errord.func(10); //compile errord.Base::func();d.Base::func(100);return 0; }

本例中,Base 類的func()、func(int)和 Derived 類的func(char *)、func(bool)四個(gè)成員函數(shù)的名字相同,參數(shù)列表不同,它們看似構(gòu)成了重載,能夠通過(guò)對(duì)象 d 訪問(wèn)所有的函數(shù),實(shí)則不然,Derive 類的 func 遮蔽了 Base 類的 func,導(dǎo)致第 26、27 行代碼沒(méi)有匹配的函數(shù),所以調(diào)用失敗。

如果說(shuō)有重載關(guān)系,那么也是 Base 類的兩個(gè) func 構(gòu)成重載,而 Derive 類的兩個(gè) func 構(gòu)成另外的重載。

總結(jié)

以上是生活随笔為你收集整理的C++继承时名字的遮蔽的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 黄色免费网站在线观看 | 国产丝袜久久 | 91久久久久国产一区二区 | 国产孕妇一区二区三区 | 强行糟蹋人妻hd中文 | 欧美久久精品一级黑人c片 1000部多毛熟女毛茸茸 | 成年人黄色大全 | 国产中文久久 | 国产激情一区二区三区视频免樱桃 | 成人污在线观看 | 一级全黄色片 | 兔费看少妇性l交大片免费 日韩高清不卡 | 国产成年无码久久久久毛片 | 成人免费毛片观看 | 亚洲午夜网 | 久草资源在线观看 | 麻豆久久精品 | 亚洲精品福利视频 | 亚洲一区免费在线观看 | 深夜福利院 | 韩国三级中文字幕hd久久精品 | 激情五月婷婷久久 | 精品国产一二三区 | www 在线观看视频 | 午夜国产一区 | 伊人久久影院 | 九色国产视频 | 91网站免费视频 | 日日操夜夜干 | 17c在线观看 | 欧美一区二区三区在线播放 | 国产网站入口 | 色视频在线播放 | 男人天堂av电影 | 欧美另类亚洲 | 生活片av | 日韩精品一区二区三区不卡 | 国产成人亚洲精品自产在线 | 国产精品久久久精品 | 成人av影视在线 | 欧美一级二级三级视频 | 一级免费观看 | 国产xx视频 | 伊人春色在线视频 | 碰碰97 | 乱lun合集男男高h | 日本女人黄色 | 秒拍福利视频 | 激情另类小说 | 午夜91| 成人网站免费观看入口 | 欧美bbbbbbbbbbbb1| 日日夜夜人人 | 久久国产免费观看 | 久久久一级黄色片 | 日韩一区网站 | 91视频啪啪 | 99久久国| 后进极品美女圆润翘臀 | 国产精品99久久久久久大便 | 鲁鲁狠狠狠7777一区二区 | 麻豆亚洲av成人无码久久精品 | 啪视频在线观看 | 激情网色| 最新最近中文字幕 | 玖玖玖国产精品 | 羞羞影院体验区 | 爱爱视频免费网站 | 亚洲色图日韩 | 18禁超污无遮挡无码免费游戏 | 老司机伊人 | 欧美激情免费在线观看 | 精品国产av无码一区二区三区 | 久久人人爽天天玩人人妻精品 | 99色图 | 凹凸福利视频 | 色狗网站 | 人av在线| 欧美刺激性大交 | 日本高清久久 | 国产激情视频一区二区三区 | 国产激情无套内精对白视频 | 国产又粗又大又长 | 九九亚洲视频 | 草草国产 | 免费观看已满十八岁 | 成人动漫一区 | 精品婷婷色一区二区三区蜜桃 | 亚洲一区二区高清 | 亚洲最大网 | 91精品国产综合久久香蕉922 | 老头糟蹋新婚少妇系列小说 | 99日韩精品 | 国产乱码视频 | 国产精品国产一区二区三区四区 | 国产精品视频观看 | 国产一区二三区 | 亚洲制服丝袜在线播放 | 精品国产999 |