本篇內(nèi)容主要講解“C或C++中公有繼承、保護(hù)繼承和私有繼承的區(qū)別是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“C或C++中公有繼承、保護(hù)繼承和私有繼承的區(qū)別是什么”吧!
公司主營業(yè)務(wù):成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出相城免費(fèi)做網(wǎng)站回饋大家。
C/C++ 公有繼承、保護(hù)繼承和私有繼承的區(qū)別
在c++的繼承控制中,有三種不同的控制權(quán)限,分別是public、protected和private。定義派生類時(shí),若不顯示加上這三個(gè)關(guān)鍵字,就會使用默認(rèn)的方式,用struct定義的類是默認(rèn)public繼承,class定義的類是默認(rèn)private繼承。這和Java有很大的不同,Java默認(rèn)使用public繼承,而且只有公有繼承。
1.使用public繼承時(shí),派生類內(nèi)部可以訪問基類中public和protected成員,但是類外只能通過派生類的對象訪問基類的public成員。
(1)基類的public成員在派生類中依然是public的。
(2)基類中的protected成員在派生類中依然是protected的。
(3)基類中的private成員在派生類中不可訪問。
2.使用protected繼承時(shí),派生類內(nèi)部可以訪問基類中public和protected成員,并且類外也不能通過派生類的對象訪問基類的成員(可以在派生類中添加公有成員函數(shù)接口間接訪問基類中的public和protected成員)。
(1)基類的public成員在派生類中變?yōu)閜rotected成員。
(2)基類的protected成員在派生類中依然是protected成員。
(3)基類中的private成員在派生類中不可訪問。
3.使用private繼承時(shí),派生類內(nèi)部可以訪問基類中public和protected成員,并且類外也不能通過派生類的對象訪問基類的成員(可以在派生類中添加公有成員函數(shù)接口間接訪問基類中的public和protected成員)。
(1)基類的public成員在派生類中變成private成員。
(2)基類的protected成員在派生類中變成private成員。
(3)基類的private成員在派生類中不可訪問。
為了便于理解,我們用一個(gè)表格來說明這幾種控制符使用的情況:
派 生 方 式 | 基類的public成員 | 基類的protected成員 | 基類的private成員 |
public派生 | 還是public成員 | 變?yōu)閜rotected成員 | 不可見 |
protected派生 | 變成protected成員 | 還是protected成員 | 不可見 |
private派生 | 變?yōu)閜rivate成員 | 變成private成員 | 不可見 |
下面用代碼簡單敘述
#include <iostream> class Base { public: int public_a; virtual void test() = 0; protected: int protected_a; private: int private_a; }; //公有繼承 class PublicDerived : public Base { public: virtual void test() { public_a = 1; //public_a public繼承后還是public類型 protected_a = 2; //protected_a 還是protected類型 //private_a = 3; //派生類不可訪問基類私有成員 } }; //保護(hù)繼承 class ProtectedDerived : protected Base { public: virtual void test() { public_a = 1; //public_a protected繼承后變?yōu)閜rotected類型 protected_a = 2; //protected_a 還是protected類型 //private_a = 3; //派生類不可訪問基類私有成員 } }; //私有繼承 class PrivateDerived : private Base { public: virtual void test() { public_a = 1; //public_a private繼承后變?yōu)閜rivate類型 protected_a = 2; //protected_a private繼承后變?yōu)閜rivate類型 //private_a = 3; //派生類不可訪問基類私有成員 } };
在c++中public繼承是is-a的關(guān)系。也就說適用于基類身上的一定也適用于派生類身上,因?yàn)槊恳粋€(gè)派生類對象也都是一個(gè)基類對象。派生類對象轉(zhuǎn)換為基類對象在需要的時(shí)候是可以自動(dòng)轉(zhuǎn)化的。
其實(shí),protected和private派生后的派生類不是基類的子類,因?yàn)榇伺缮惒荒茏龌愃茏龅乃惺虑?。我們看看下面的代碼
#include <iostream> class Person { public: Person(){}; void eat() {std::cout << "eat\n";} }; //公有繼承 class PublicStudent : public Person { public: PublicStudent() {} void study() {std::cout << "study\n";} }; //保護(hù)繼承 class ProtectedStudent : protected Person { public: ProtectedStudent() {} void study() {std::cout << "study\n";} }; //私有繼承 class PrivateStudent : private Person { public: PrivateStudent() {} void study() {std::cout << "study\n";} }; void func_test(Person &p) { p.eat(); } int main() { PublicStudent public_s; ProtectedStudent protected_s; PrivateStudent private_s; func_test(public_s); //正確,公有繼承時(shí),派生類可以做基類的所有事情 func_test(protected_s); //出錯(cuò),保護(hù)繼承時(shí),派生類不能做基類的所有事情 func_test(private_s); //出錯(cuò),私有繼承時(shí),派生類不可以做基類的所有事情 system("pause"); return 0; }
func_test()需要一個(gè)Person類型的對象,在調(diào)用func_test(public_s)時(shí)實(shí)際傳遞的是PublicStudent對象,因?yàn)镻ublicStudent共有繼承Person類,所以PublicStudent對象可以使用Person類中所有的公有成員,也就是說基類對象可以做的事,公有繼承的派生類對象照樣可以做。而ProtectedStudent和PrivateStudent都是非公有有繼承,他們的對象不可以直接訪問Person類的成員。但是在他們派生類的對象空間中是包含基類的的對象,只是無法讓他們公開訪問。從上面的代碼可以看出來,protected繼承和private繼承的派生類已經(jīng)不是基類的子類了。
寫了這么多,其實(shí)非公有繼承很少遇到。
到此,相信大家對“C或C++中公有繼承、保護(hù)繼承和私有繼承的區(qū)別是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
分享題目:C或C++中公有繼承、保護(hù)繼承和私有繼承的區(qū)別是什么
分享URL:http://aaarwkj.com/article28/pcscjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、小程序開發(fā)、App設(shè)計(jì)、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站維護(hù)、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)