繼承機(jī)制是面向?qū)ο蟪绦蛟O(shè)計(jì)使代碼可以復(fù)用的最重要的手段,它允許程序員在保持原有類(lèi)性質(zhì)的基礎(chǔ)上進(jìn)行擴(kuò)展,增加功能。
在清鎮(zhèn)等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶(hù)提供成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),營(yíng)銷(xiāo)型網(wǎng)站,外貿(mào)網(wǎng)站建設(shè),清鎮(zhèn)網(wǎng)站建設(shè)費(fèi)用合理。繼承的定義的格式:
class 派生類(lèi)名:繼承類(lèi)型 基類(lèi)名
繼承類(lèi)型包括有:public(公有繼承)
private(私有繼承)
protected(保護(hù)繼承)
繼承關(guān)系 | 基類(lèi)的public成員 | 基類(lèi)的private成員 | 基 類(lèi) 的protected成員 | 繼承引起的訪(fǎng)問(wèn)控制變化 |
public | public成員 | 不可見(jiàn) | protected成員 | 非私有成員在子類(lèi)中的訪(fǎng)問(wèn)屬性不變 |
private | private成員 | 不可見(jiàn) | private成員 | 非私有成員在子類(lèi)中的訪(fǎng)問(wèn)屬性變?yōu)閜rivate屬性 |
protected | protected成員 | 不可見(jiàn) | protected成員 | 非私有成員在子類(lèi)中的訪(fǎng)問(wèn)屬性變?yōu)閜rotected屬性 |
舉例:
#includeusing namespace std; class A { public: int f1(); private: int i1; protected: int j1; }; int A::f1() { cout << "函數(shù)f1的實(shí)現(xiàn)" << endl; } class B :public A { public: int f2() { j1 = 0; i1 = 0; cout << "函數(shù)f2的實(shí)現(xiàn)" << endl; }
在公有繼承的子類(lèi)中,不能訪(fǎng)問(wèn)基類(lèi)中的private成員。因?yàn)榛?lèi)和子類(lèi)是兩個(gè)不同的類(lèi)域,private成員只能在類(lèi)能訪(fǎng)問(wèn)。
私有繼承和保護(hù)繼承也是一樣。
注意:不管是哪種繼承方式,在派生類(lèi)中都可以訪(fǎng)問(wèn)基類(lèi)的公有成員和保護(hù)成員,基類(lèi)的私有成員存在,但在子類(lèi)中不能訪(fǎng)問(wèn)。
4. 關(guān)鍵字class繼承時(shí),缺省繼承類(lèi)型則默認(rèn)為:private.
關(guān)鍵字struct繼承時(shí),缺省繼承類(lèi)型則默認(rèn)為:public.
5. 繼承關(guān)系中構(gòu)造函數(shù)的調(diào)用順序:
基類(lèi)構(gòu)造函數(shù)------>派生類(lèi)中對(duì)象的構(gòu)造函數(shù)--------->派生類(lèi)構(gòu)造函數(shù)體
舉例:
#includeusing namespace std; class A { public: A() { a = 0; cout << "A's default constuctor called." << endl; } private: int a; }; class B :public A { public: B() { b = 0; cout << "B's default constuctor called." << endl; } private: int b; }; int main() { B bb; system("pause"); return 0; }
6. 繼承關(guān)系中析構(gòu)函數(shù)的調(diào)用順序:
派生類(lèi)析構(gòu)函數(shù)體------>派生類(lèi)對(duì)中析構(gòu)函數(shù)--------->基類(lèi)構(gòu)造函數(shù)
說(shuō)明:
基類(lèi)沒(méi)有缺省構(gòu)造函數(shù),派生類(lèi)必須要在初始化列表中顯式給出基類(lèi)名和參數(shù)列表;
基類(lèi)沒(méi)有定義構(gòu)造函數(shù),則派生類(lèi)也可以不用定義,全部使用缺省構(gòu)造函數(shù);
基類(lèi)定義了帶有形參表構(gòu)造函數(shù),派生類(lèi)就一定定義構(gòu)造函數(shù)。
7.關(guān)于繼承體系中的作用域:
在繼承體系中基類(lèi)和派生類(lèi)是兩個(gè)不同的作用域,如果子類(lèi)中有與基類(lèi)同名的成員,子類(lèi)成員屏蔽基類(lèi)對(duì)成員直接訪(fǎng)問(wèn)。
注:在子類(lèi)成員函數(shù)中,可以使用 基類(lèi)名::基類(lèi)成員名 這樣的方式類(lèi)訪(fǎng)問(wèn)。
舉例:
#includeusing namespace std; class A { public: int temp; private: int a; }; class B :public A { public: int temp; int add() { temp = 100; A::temp = 0; return temp; } private: int b; }; int main() { B bb; int ret = 0; ret = bb.add(); system("pause"); return 0; }
將子類(lèi)B中的temp賦值為100,基類(lèi)中的temp賦值為0;
8. 繼承中的賦值兼容規(guī)則:
子類(lèi)對(duì)象可以賦值給基類(lèi)對(duì)象,反之不可以;
基類(lèi)對(duì)象的指針/引用可以指向基類(lèi)對(duì)象,子類(lèi)對(duì)象的指針/引用可以通過(guò)強(qiáng)制類(lèi)型轉(zhuǎn)換的方式指向基 類(lèi)對(duì)象,但是有內(nèi)存泄漏的風(fēng)險(xiǎn)。
9. 友元與繼承
友元關(guān)系不能繼承,基類(lèi)的友元不能訪(fǎng)問(wèn)子類(lèi)的私有和保護(hù)成員。
舉例:
#includeusing namespace std; class A { friend class C; public: int temp; private: int a; }; class B :public A { public: int temp; private: int b; protected: int i; }; class C { public: int c; int f() { temp = 2; i = 0; return 0; } }; int main() { C bb; int ret = 0; ret = bb.f(); system("pause"); return 0; }
10. 單繼承:一個(gè)子類(lèi)只有一個(gè)基類(lèi)
11. 多繼承:一個(gè)子類(lèi)有多個(gè)基類(lèi),
定義形式:class 子類(lèi)名:繼承類(lèi)型 基類(lèi)名<,繼承類(lèi)型 基類(lèi)名,繼承類(lèi)型 基類(lèi)名,...>
12. 菱形繼承:
定義形式:
舉例:
發(fā)現(xiàn)問(wèn)題:Assistant的對(duì)象中存在兩份Person成員,菱形繼承中存在二義性和數(shù)據(jù)冗余的問(wèn)題。
虛繼承可以解決了菱形繼承中二義性和數(shù)據(jù)冗余的問(wèn)題,但是一般不適用虛繼承,因?yàn)樘摾^承帶來(lái)了性能上的損耗。
說(shuō)明:C++語(yǔ)言規(guī)定,虛基類(lèi)子對(duì)象是由最派生類(lèi)的構(gòu)造函數(shù)通過(guò)調(diào)用虛基類(lèi)的構(gòu)造函數(shù)進(jìn)行初始化的。如果一個(gè)派生類(lèi)有一個(gè)直接或間接的虛基類(lèi),那么派生類(lèi)的構(gòu)造函數(shù)的成員初始列表中必須列出對(duì)虛基類(lèi)構(gòu)造函數(shù)的調(diào)用;如果未列出,則表示使用該虛基類(lèi)的默認(rèn)構(gòu)造函數(shù)來(lái)初始化派生類(lèi)對(duì)象中的虛基類(lèi)子對(duì)象。
創(chuàng)新互聯(lián)www.cdcxhl.cn,專(zhuān)業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開(kāi)啟,新人活動(dòng)云服務(wù)器買(mǎi)多久送多久。