波多野结衣家庭教师奇优,再深点灬舒服灬太大爽,啦啦啦啦在线直播免费播放,新婚之夜性史观看

首頁

>

>

類的私有成員可以繼承嗎_c++私有繼承有什么用?

類的私有成員可以繼承嗎_c++私有繼承有什么用?

在線咨詢 時間: 2022-06-12 06:18:20
特邀律師
北京知名律師事務(wù)所,解決重大,疑難問題!團隊有著深厚的理論知識、豐富的辦案經(jīng)營、認證負責的職業(yè)精神,以專業(yè)的知識和技能切實維護當事人的正當合法權(quán)益。
如果基類定義的純虛函數(shù),那么子類繼承下來的也是純虛函數(shù),如果不給予實現(xiàn),那么便不能創(chuàng)建子類的實例,如果基類定義的是非純虛函數(shù),那么子類繼承下來的也是非純虛函數(shù)。

如果基類定義的純虛函數(shù),那么子類繼承下來的也是純虛函數(shù),如果不給予實現(xiàn),那么便不能創(chuàng)建子類的實例,如果基類定義的是非純虛函數(shù),那么子類繼承下來的也是非純虛函數(shù)。都可以不予實現(xiàn),因為自動繼承下來了,看你子類的需要。

1.派生類間接訪問基類私有成員

在類的繼承中,基類私有成員在派生類中是“不可見“的,這種”不可見“是指在派生類的成員函數(shù)中,或者通過派生類的對象(指針,引用)不能直接訪問它們。但是,不能直接訪問并不代表不能訪問。在派生類還是能夠通過調(diào)用基類的共有函數(shù)的方式來間接地訪問基類的私有成員,包括私有成員變量和私有成員函數(shù)。考察如下程序。

#include <iostream>using namespace std;class A{ int i; void privateFunc() { cout<<"this is a private function of base class"<<endl; }public: A(){i=5;} int getI() { return i; } void usePrivateFunc() { privateFunc(); }};class B:public A{public: void printBaseI() { cout<<getI()<<endl; } void usePrivateFunction() { usePrivateFunc(); }};int main(){ B b; b.printBaseI(); b.usePrivateFunction();}

程序輸出結(jié)果:

5this is a private function of base class

在類B中,由于基類A的成員變量i和成員函數(shù)privateFunc()都是私有的,所以在類B的成員函數(shù)中無法直接訪問到它們。但是,由于類A的公有成員函數(shù)getI()可以訪問到私有成員變量i,而usePrivateFunction()可以訪問私有成員函數(shù)privateFunc(),所以在類B中通過調(diào)用函數(shù)getI()和usePrivateFunc()就可以簡介訪問基類A中的私有成員。

2.私有成員會被繼承嗎

如果基類中并沒有提供訪問私有成員的公有函數(shù),那么其私有成員是否“存在“呢?還會不會被繼承呢?其實,這些私有成員的確是存在的,而且會被繼承,只不過程序員無法通過正常的渠道訪問到它們。考察如下程序,通過一種特殊的方式訪問了類的私有成員。

#include <iostream>using namespace std;class A{ int i; void privateFunc() { cout<<"this is a private function of base class"<<endl; }public: A(){i=5;}};class B:public A{public: void printBaseI() { int* p=reinterpret_cast<int*>(this);//獲取當前對象的首地址 cout<<*p<<endl; } void usePrivateFunction() { void (*func)()=NULL; _asm { mov eax,A::privateFunc; mov func,eax; } func(); }};int main() { B b; b.printBaseI(); b.usePrivateFunction();}

程序輸出結(jié)果:

5this is a private function of base class

(1)雖然類A沒有提供訪問私有成員變量i的公有方法,但是在類A(以及類A的派生類)對象中個,都包含變量i。

(2)雖然類A并沒有提供訪問私有成員函數(shù)privateFunc()的公有函數(shù),但是在程序代碼區(qū)依然存有函數(shù)privateFunc()的代碼,通過內(nèi)聯(lián)匯編獲取該函數(shù)的入口地址,仍然可以順利調(diào)用。

綜上所述,類的私有成員一定存在,也一定被繼承到派生類中,從大小也可以看出派生類包含了基類的私有成員,讀者可自行考證。只不過收到C++語法的限制,在派生類中訪問基類的私有成員只能通過間接的方式進行。

子類繼承父類時,需要注意以下三點:

1、在子類繼承父類的時候,子類必須調(diào)用父類的構(gòu)造函數(shù)。

2、如果父類有默認構(gòu)造函數(shù),子類實例化時自動調(diào)用

私有繼承可以實現(xiàn) has a 的關(guān)系,也就是包含。私有繼承中:1. 父類的 public 和 protected 成員在子類中變成了子類 private 的成員,1.1 這就意味著從父類繼承過來的這些成員(public/protected), 子類的成員函數(shù)可以調(diào)用之;但是子類的對象就不能夠調(diào)用之;進一步的理解就是,在 子類中可以調(diào)用父類的(public/private)接口, 但是這些接口不會被暴露出去。這個特性正好實現(xiàn)了包含(composite)的特性。

【版權(quán)聲明】部分文章和信息來源于互聯(lián)網(wǎng)、律師投稿,刊載此文是出于傳遞更多信息和學習之目的。若有來源標注錯誤或侵犯了您的合法權(quán)益,請作者持權(quán)屬證明于本網(wǎng)聯(lián)系,我們將予以及時更正或刪除。 【在線反饋】
張律師
用我千方百技,解您千愁萬緒
主站蜘蛛池模板: 美国式禁忌| 女人是男人的未来1分29分| 男女生差差差很痛的app| 乱人伦老妇女东北| 国产精品毛片va一区二区三区| 国产无套粉嫩白浆在线观看| 啊轻点灬大ji巴太粗太长了h| 久久99热66这里只有精品一 | 欧美亚洲精品suv| 成人久久精品一区二区三区| 美女扒开裤子让男人桶视频| 在线播放a1| 李老汉的性生生活2| 日本videoshd高清黑人| 三男三女换着曰| 久久天天躁夜夜躁狠狠85台湾| 中文亚洲日韩欧美| 啊轻点灬大ji巴太粗太长了h| a级毛片毛片免费观看久潮喷| 国产91在线|欧美| 67194在线看片| 国产精品国产精品国产专区不卡| www.米奇777.com| 极品丝袜乱系列大全集目录| 99国产精品久久久久久久成人热| 最近免费中文字幕mv在线电影| 亚洲国产精品一区二区久久| 乱淫片免费影院观看| 紧窄极品名器美妇灌| 一级艳片加勒比女海盗1| 美女让我桶| 啊公交车坐最后一排被c视频| 北条麻妃大战黑人| 三级毛片在线免费观看| 日本高清二三四本2021第九页| 韩国男女无遮挡高清性视频| 国产va在线播放| 国产精品人成在线播放新网站| 欧美日韩欧美| 亚洲免费观看视频| 美女的阴沟|