




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、面向?qū)ο蟪绦蛟O(shè)計 第二版,7.1 繼承的好處 7.2 C +定義派生類的語法 7.3 基類成員的訪問屬性 7.4 派生類對象的初始化 7.5 多重繼承 7.6 基類與派生類之間的轉(zhuǎn)換 7.7 小結(jié),第七章 繼承性,7.1 繼承的好處,當(dāng)原來使用的數(shù)據(jù)結(jié)構(gòu)不適應(yīng)新系統(tǒng)的需求,或原來提供的功能需要擴充,或原來的性能不能滿足現(xiàn)在的要求時,派生類的成員函數(shù)可以調(diào)用基類的成員函數(shù),并在此基礎(chǔ)上增加必要的程序代碼; 當(dāng)需要完全改變原有操作的實現(xiàn)算法時,可以在派生類中實現(xiàn)一個與基類成員函數(shù)同名而算法不同的成員函數(shù); 當(dāng)需要增加新功能時,可以在派生類中定義一個新的成員函數(shù)。 繼承性還使得用戶在開發(fā)新的應(yīng)用系統(tǒng)
2、時不必完全從零開始,可以繼承原有的相似系統(tǒng)的功能或者從類庫中選取適用的類,再派生出新的類以實現(xiàn)所需要的功能。,面向?qū)ο蟪绦蛟O(shè)計 第二版,下面讓我們通過一個具體例子來感受一下使用繼承機制的必要: class String private: char *contents;/說明了一個字符串首地址的指針 int length;/字符串長度 public: String() length = 0; int get_length() return length; char *get_contents() return contents; void set_contents(int in_length,c
3、har *in_contents); void set_contents(char *in_contents); ;,面向?qū)ο蟪绦蛟O(shè)計 第二版,可以利用C +語言提供的繼承機制,從String類派生出新的派生類EditString,增加了移動光標(biāo),在光標(biāo)處編輯的處理功能: class EditString : public String/派生類EditString的定義 private: int cursor; public: EditString(int offset = 0) cursor = offset; int get_cursor() return cursor; void mov
4、e_cursor(int offset);/ 把光標(biāo)移到指定位置 void add(String *text);/ 在光標(biāo)后添加一個字符串 void replace(String *text);/ 把光標(biāo)后內(nèi)容換成新字符串 void del(int how_much); / 刪除光標(biāo)后指定個數(shù)的字符 ;,面向?qū)ο蟪绦蛟O(shè)計 第二版,下面是使用String類和EditString類的一個主函數(shù): void main() String s1;/聲明基類String的對象s1 EditString s2;/聲明派生類EditString的對象s2 char *p; s1.set_contents(11
5、,Hello, world); p = s1.get_contents(); s2.set_contents(11, p); s2.move_cursor(6); s2.replace(“Students”); ,面向?qū)ο蟪绦蛟O(shè)計 第二版,為了軟件復(fù)用,必須具有: 抽象機制 將一組相似模塊中的共性內(nèi)容抽象出來,作為基類的內(nèi)容向外部世界共享。 繼承機制 無需修改原有程序模塊的代碼就可以重用原有的程序資源并對其功能進行擴充。,7.2 C+定義派生類的語法 7.2.1 定義派生類的語法,面向?qū)ο蟪绦蛟O(shè)計 第二版,圖7.1書寫父類表的語法,7.2.2 訪問權(quán)修飾符,面向?qū)ο蟪绦蛟O(shè)計 第二版,表7.1父
6、類成員在子類中的訪問屬性,三條規(guī)律: 派生類成員函數(shù)不能直接訪問基類的私有成員。 派生類繼承了基類的私有成員,在創(chuàng)建派生類對象時,先為基類中說明的數(shù)據(jù)成員(包括私有數(shù)據(jù)成員)分配內(nèi)存,然后才為派生類中說明的數(shù)據(jù)成員分配內(nèi)存,所有上述成員都屬于這個新創(chuàng)建的對象。 如果在子類中需要使用從父類繼承來的父類私有成員,必須通過父類公有(或保護)的成員函數(shù)訪問。,面向?qū)ο蟪绦蛟O(shè)計 第二版, 訪問權(quán)修飾符只能使繼承來的成員的可訪問性受到更嚴格限制,而不能放松這種限制。 在繼承機制下信息隱藏的最好方法,是在基類中使用訪問權(quán)符protected。 在基類中使用訪問權(quán)符protected聲明的成員,可由派生類的成
7、員函數(shù)直接訪問,在派生類之外,任何函數(shù)是不能直接訪問的。通常把被派生類繼承后需較頻繁使用的基類數(shù)據(jù)成員的訪問屬性規(guī)定為protected。,使用訪問權(quán)修飾符時的注意事項: 要區(qū)分訪問權(quán)修飾符與訪問權(quán)符的概念,在定義派生類時,派生類通過訪問權(quán)修飾符從基類獲得一定權(quán)限,進行公有派生、保護派生或私有派生,例如:class B:public A;,這時語句中的public即為訪問權(quán)修飾符;而當(dāng)一個類定義過程中,有些數(shù)據(jù)成員被封裝在公有部分,有些數(shù)據(jù)成員被封裝在私有部分,而這時使用的public、protected及private即為訪問權(quán)符。 如果訪問權(quán)修飾符為public,則派生類中方法和數(shù)據(jù)成員的
8、訪問權(quán)限不變(同基類),但如果訪問權(quán)修飾符為protected或private,則派生類中的方法和數(shù)據(jù)成員的訪問權(quán)限變小,具體請參見表7.1父類成員在子類中的訪問屬性加以理解。,面向?qū)ο蟪绦蛟O(shè)計 第二版,在實際開發(fā)過程中,允許其他類使用的方法(即成員 函數(shù))及數(shù)據(jù)成員(變量)應(yīng)該定義在public訪問權(quán)符之下 的部分,為外界提供一個服務(wù)接口。 準(zhǔn)備作為繼承或派生的方法或數(shù)據(jù)成員應(yīng)該定義在 protected訪問權(quán)符之下的部分。將僅作為本類使用的方法 或數(shù)據(jù)成員應(yīng)該定義在private訪問權(quán)符之下的部分。 不建議把類屬性說明在public訪問權(quán)符之下的部分,通 常說明于protected與pri
9、vate訪問權(quán)符之下的部分,以保證 程序的安全可靠。,面向?qū)ο蟪绦蛟O(shè)計 第二版,7.3 基類成員的訪問屬性,基類成員被派生類繼承之后,它的訪問屬性與 原來在基類中的訪問屬性可以有所不同。調(diào)整基類 成員訪問屬性的基本手段是訪問權(quán)修飾符,在上一 節(jié)中已經(jīng)系統(tǒng)全面地講述了訪問權(quán)修飾符對基類成 員訪問屬性的調(diào)整作用,本節(jié)進一步講述調(diào)整基類 成員訪問屬性的其他方法,以及基類特殊成員在派 生類中的訪問屬性。,面向?qū)ο蟪绦蛟O(shè)計 第二版,7.3.1 同名成員,為了在派生類中使用基類的同名成員,必須在 該成員名之前加上基類名和作用域分辨符“:”作為 限定符,即必須使用下列格式才能訪問到基類的 同名成員: 基類名
10、 : 成員名,面向?qū)ο蟪绦蛟O(shè)計 第二版,C+語言允許在派生類中說明的成員與基類中的成 員名字相同,稱派生類成員覆蓋了基類的同名成員,在派 生類中使用這個名字意味著訪問在派生類中重新定義的成 員。為了在派生類中使用基類的同名成員,必須在該成員 名之前加上基類名和作用域分辨符“”作為限定符。 例如: class Base protected: int a,b; public: Base(int i,int j) a=i; b=j;/基類中說明的數(shù)據(jù)成員b ;,面向?qū)ο蟪绦蛟O(shè)計 第二版,class Derived:public Base int b,c; public: Derived(int x1
11、,int x2,int x3,int x4):Base(x1,x2) b=x3;/派生類中說明的數(shù)據(jù)成員b c=x4; void set_c(int x) c=x+b+Base:b; /b為派生類中的b(屏蔽了基類中的 /b),Base:b為基類中的b(在派 /生類中使用基類中的成員) ;,面向?qū)ο蟪绦蛟O(shè)計 第二版,下面我們再看一個同名成員函數(shù)屏蔽的例子: #include “stdafx.h” #include “iostream.h” class Base public: void fun( )cout Base : fun() endl; void fun(int i)cout Base
12、 : fun(int i) endl; /說明了一個fun()函數(shù)的重載函數(shù) ; class Derive :public Base public: void fun( )cout Derive : fun( ) endl; /在派生類中說明一個fun( )函數(shù) ;,面向?qū)ο蟪绦蛟O(shè)計 第二版,void main( ) Base e;/說明了一個基類對象 e.fun( );/通過基類對象調(diào)用的是基類中的成員函數(shù)fun( ) e.fun(3);/通過基類對象調(diào)用的是基類中的重載的成員函數(shù)fun(int i) Derive d;/說明了一個派生類對象 d.fun( );/通過派生類對象調(diào)用的是派生類
13、中的成員函數(shù)fun( ), /基類的fun( )及其他重載的成員函數(shù)均被屏蔽 /d.fun(3);/此行若不是注釋,編譯將會出現(xiàn)錯誤 d.Base : fun( );/利用派生類對象,通過“類名 : ”限定,調(diào)用基類 /的成員函數(shù) d.Base : fun(3);/調(diào)用基類的重載成員函數(shù) ,面向?qū)ο蟪绦蛟O(shè)計 第二版,運行結(jié)果: Base : fun() Base : fun(int i) Derive : fun() Base : fun() Base : fun(int i),注意: 派生類屏蔽基類中的同名成員函數(shù),是指屏 蔽了基類中的該同名函數(shù)及其所有重載函數(shù)。 由于派生類中“fun()”
14、函數(shù)屏蔽了基類中“fun()” 函數(shù)的所有版本,因此,“d.fun(3);”的操作,會 出現(xiàn)錯誤提示“error C2660: fun : function does not take 1 parameters”。,面向?qū)ο蟪绦蛟O(shè)計 第二版,7.3.2 靜態(tài)成員,不論是公有派生還是私有派生,派生類都可以 使用基類的靜態(tài)成員,使用時唯一的要求是,必須 用“類名:成員名”代表這個靜態(tài)成員。例如: class Base public: static void a(); void b(); ; class Derived:private Base . ; class DD:public Derived
15、 void func(); ;,面向?qū)ο蟪绦蛟O(shè)計 第二版,void DDfunc() Basea(); / 編譯通過 a(); / 編譯出錯 b(); / 編譯出錯 ,在上面的程序片斷中,Derived類從Base類私有派生,繼承來的函數(shù)b已經(jīng)成為Derived類的私有成員函數(shù),因此,它的子類DD不能直接使用函數(shù)b; 函數(shù)a是Base類的靜態(tài)成員函數(shù),它不受訪問權(quán)修飾符的影響,在間接派生類DD中仍然可以直接使用,但是,使用它的時候必須用“類名:函數(shù)名”顯式指定它,否則會產(chǎn)生編譯錯誤。,面向?qū)ο蟪绦蛟O(shè)計 第二版,在靜態(tài)成員函數(shù)的實現(xiàn)中不能直接使用類中聲明的非靜態(tài)成員,可以使用類中聲明的靜態(tài)成員。
16、如果需要使用非靜態(tài)成員時,可通過對象使用。 例子:,面向?qū)ο蟪绦蛟O(shè)計 第二版,例7_1,7.3.3 訪問聲明,當(dāng)一個類B是從其父類A私有派生的時候,它所繼承的父 類公有段或保護段的所有成員,在這個派生類中的訪問屬性 都成為私有的,如果從類B再派生出類C,則類C不能直接訪 問其間接基類A的任何非靜態(tài)成員。為了使程序員具有必要的靈活性 ,以方便應(yīng)用系統(tǒng)的開發(fā),C+語言提供了一種調(diào)節(jié)機制,稱為訪問聲明,它是對私有派生方法的一種補充。 舉例說明使用訪問聲明的方法: (續(xù)下頁),面向?qū)ο蟪绦蛟O(shè)計 第二版,class Base int x; public: int y,z; int f(int i); ;
17、 class Derived:private Base/Derived類從Base類私有派生 int a; public: Basey; / 調(diào)整Basey的訪問屬性 int b; void p(); ;,面向?qū)ο蟪绦蛟O(shè)計 第二版,上例中Base類公有段的所有成員原本都應(yīng)該成 為Derived類的私有成員,但是,使用訪問聲明: Base:y 把Base類的公有成員y在私有派生類Derived中 顯式聲明為公有的,就使得Derived類的派生類仍 然可以直接訪問它。,面向?qū)ο蟪绦蛟O(shè)計 第二版,使用訪問聲明機制時應(yīng)該注意以下幾點規(guī)則: 訪問聲明僅僅調(diào)整名字的訪問屬性,不允許為它說 明任何類型。 不
18、允許利用訪問聲明機制,在派生類中提高或降低 基類成員的可訪問性,也就是說,基類的公有段或保護段的 成員,在派生類中的訪問屬性僅能利用訪問聲明機制相應(yīng) 地說明為公有的或保護的。 (參看書p158第3行開始的例子),面向?qū)ο蟪绦蛟O(shè)計 第二版, 對重載函數(shù)名的訪問聲明,將調(diào)整基類中具有該名字的所有成員函數(shù)的訪問屬性 ,在基類中訪問屬性不同的重載函數(shù)名不能通過訪問聲明調(diào)整其訪問屬性,否則與規(guī)則(2)發(fā)生矛盾。 (參看書p158例子) 如果派生類中說明了一個與基類成員同名的成員,則不能使用訪問聲明調(diào)整該名字的訪問屬性,否則在派生類中會形成對同一名字的二次說明。,面向?qū)ο蟪绦蛟O(shè)計 第二版,定義一個派生類之
19、后,它將繼承其基類中的全部成員。創(chuàng)建了派生類的一個對象之后,該對象中不僅包含在派生類中聲明的數(shù)據(jù)成員,而且還包含它從基類繼承的全部數(shù)據(jù)成員。 也就是說,在創(chuàng)建派生類的對象時,編譯程序不僅要為這個派生類中聲明的數(shù)據(jù)成員分配內(nèi)存空間,還要為它的基類中聲明的數(shù)據(jù)成員分配內(nèi)存空間,怎樣在這些內(nèi)存空間中放置初始數(shù)值呢?這就是派生類對象的初始化問題。 派生類對象的初始化與非派生類對象初始化的主要區(qū)別在于,既要完成派生類本身聲明的數(shù)據(jù)成員的初始化工作,又要同時完成從其基類繼承來的數(shù)據(jù)成員的初始化工作。,7.4 派生類對象的初始化,派生類對象的初始化問題實質(zhì)上就是,當(dāng)創(chuàng)建派生類的一個對象時,怎樣在調(diào)用派生類本
20、身構(gòu)造函數(shù)的同時也調(diào)用基類的構(gòu)造函數(shù)。C+通過在派生類構(gòu)造函數(shù)中列出基類初始串列的方法,提供了這種初始化基類數(shù)據(jù)成員的機制。 C+語言定義派生類構(gòu)造函數(shù)的格式為: 派生類名(變元表):父類名1(變表),父類名m (變元表),對象成員名1(變元表),對象成員名n(變元表) . 下面的程序片斷舉例說明了派生類對象的初始化方法:,面向?qū)ο蟪绦蛟O(shè)計 第二版,class Base int p1,p2; public: Base(int i1,int i2) p1=i1; p2=i2; ,class Derived:Base int p3; Base obj; / 對象成員 public: /* 注意下面
21、的構(gòu)造函數(shù)定義:派生類構(gòu)造函數(shù)參數(shù)表中的各參數(shù)均為形參,而基類構(gòu)造函數(shù)和對象初始串列中的各參數(shù)均為實參。 */ Derived(int x1, int x2, int x3, int x4, int x5) : Base(x1, x2) , obj(x3, x4) p3=x5; ; main() Derived d(27,28,100,200,-50); ,在上列的主函數(shù)main中,說明Derived類的對 象d時,自動調(diào)用構(gòu)造函數(shù),先父類(即將p1、p2 賦值為i1、i2即27、28),再類對象(即把obj對 象成員中的obj.p1、obj.p2賦值為obj.i1、obj.i2即 100、2
22、00),最后自己(即將p3賦值為-50),經(jīng) 過上述過程,結(jié)果把各個數(shù)據(jù)初始化為: p1 = 27,p2 = 28, obj.p1 = 100, obj.p2 = 200, p3 = -50,面向?qū)ο蟪绦蛟O(shè)計 第二版,關(guān)于派生類對象的初始化,最后再說明幾點: 在派生類構(gòu)造函數(shù)的初始串列中,使用父類類名 來調(diào)用父類構(gòu)造函數(shù),使用對象成員名來調(diào)用內(nèi)層 類的構(gòu)造函數(shù)。 當(dāng)使用父類或內(nèi)層類的有參數(shù)的構(gòu)造函數(shù)來完成 基類成員或?qū)ο蟪蓡T的初始化時,即使派生類構(gòu)造 函數(shù)本身無需完成任何工作(函數(shù)體為空),也必須 定義派生類的構(gòu)造函數(shù)。,面向?qū)ο蟪绦蛟O(shè)計 第二版,如果在定義派生類構(gòu)造函數(shù)時省略父類初始串列,
23、則意味著使用父類的缺省構(gòu)造函數(shù)來初始化基類成 員。在這種情況下如果父類中只定義了有參數(shù)的構(gòu)造 函數(shù),而沒有定義無參數(shù)或全部參數(shù)都有缺省值的構(gòu) 造函數(shù),則在編譯時會產(chǎn)生編譯錯誤。 派生類構(gòu)造函數(shù)的執(zhí)行順序是,先父母(執(zhí)行父類構(gòu) 造函數(shù)),再客人(初始化對象成員),最后自己(初始化 派生類本身的普通數(shù)據(jù)成員)。,面向?qū)ο蟪绦蛟O(shè)計 第二版,7.5 多重繼承 7.5.1 語法,派生類還可以有多個直接基類,這種繼承關(guān)系 稱為多重繼承,也稱為多繼承。定義多重繼承的 派生類與定義單繼承的派生類的唯一差別是,在 父類表中應(yīng)該列出多個父類名,每個父類名之前 可以冠以關(guān)鍵字private或public;也可以省略
24、這些 訪問權(quán)修飾符而使用缺省的訪問權(quán)修飾符,不同 父類名之間應(yīng)該用逗號“,”隔開。,面向?qū)ο蟪绦蛟O(shè)計 第二版,7.5.2 同名引出的二義性,當(dāng)多重繼承的派生類的不同父類中含有同名 成員時,這些成員都會被派生類所繼承,如果在 派生類中簡單地通過名字來使用這些成員,就會 產(chǎn)生二義性。為了避免二義性,在派生類中使用 不同父類的同名成員時,必須在成員名之前用基 類名加作用域分辨符來限定,以明確指出所使用 的成員是從哪個基類繼承來的。,面向?qū)ο蟪绦蛟O(shè)計 第二版,面向?qū)ο蟪绦蛟O(shè)計 第二版,make為方法名 i 為形參 in表示i為輸入?yún)?shù) int表示i的類型,下面的簡單程序說明了同名帶來的二義性及避免二義
25、性的方法。例如: 為了實際工程中不鼓勵使用同名,在任何有可能引起誤解的地方,要避免使用相同的名字。,面向?qū)ο蟪绦蛟O(shè)計 第二版,例7_2,7.5.3 公共基類帶來的二義性,面向?qū)ο蟪绦蛟O(shè)計 第二版,圖7.3 公共基類帶來的二義性,#include ”iostream.h” class Base protected: int a; public: Base(int i) a=i; ; class Derived1:public Base int d1; public: Derived1(int p1,int p2):Base(p1) d1=p2; ; class Derived2:public B
26、ase int d2; public: Derived2(int x1,int x2):Base(x1) d2=x2; ;,面向?qū)ο蟪绦蛟O(shè)計 第二版,class DD:Derived1,Derived2 public: DD(int i1,int i2,int i3,inti4):Derived1(i1,i2),Derived2(i3,i4) void display() cout a n; ; 當(dāng)編譯程序分析到DD類的成員函數(shù)display時,將給出出錯信息,指出存在二義性,什么原因呢?,面向?qū)ο蟪绦蛟O(shè)計 第二版,為了消除因公共基類而引出的二義性問題,同樣必須使用基類名加作用域分辨符來限定有
27、二義性的成員名。如果想輸出從Derived1類繼承來的數(shù)據(jù)成員a,則應(yīng)該把輸出語句寫為: cout Derived1:a n; 反之,如果要輸出從Derived2類繼承來的數(shù)據(jù)成員a,則應(yīng)該像下面那樣寫輸出語句: cout Derived2:a n;,7.5.4 虛基類,為解決在多重繼承環(huán)境中因公共基類而帶來的二 義性問題,C+語言提供了虛基類(虛擬基類)機制。 為了把一個基類定義為虛基類,必須在定義派生 類時在父類表中虛基類名字前加上關(guān)鍵字Virtual。聲 明虛基類的一般格式為: class 派生類名:Virtual 訪問權(quán)修飾符 父類名 . ;,面向?qū)ο蟪绦蛟O(shè)計 第二版,#include
28、 ”iostream.h” class Base protected: int a; public: Base(int i) a=i; ; class Derived1:virtual public Base int d1; public: Derived1(int p1,int p2):Base(p1) d1=p2; ; (續(xù)下頁),面向?qū)ο蟪绦蛟O(shè)計 第二版,class Derived2:virtual public Base int d2; public: Derived2(int x1,int x2):Base(x1) d2=x2; ; class DD:Derived1,Derived
29、2 public: DD(int i1,int i2,int i3,int i4):Derived1(i1,i2), Derived2(i3,i4),Base(i1) void display() cout a n; ;,面向?qū)ο蟪绦蛟O(shè)計 第二版,面向?qū)ο蟪绦蛟O(shè)計 第二版,(a) 未使用虛基類,圖7.4 示例程序的類等級,圖(b) 使用虛基類,面向?qū)ο蟪绦蛟O(shè)計 第二版,由于在派生類DD的實例中只有基類Base中定 義的數(shù)據(jù)成員a的一份拷貝,因此,使用虛基類不 僅能消除公共基類可能帶來的二義性問題,而且 能節(jié)省內(nèi)存空間。當(dāng)然,如果在解決實際應(yīng)用問 題時,在派生類對象中確實需要公共基類中定義 的數(shù)
30、據(jù)成員的多份拷貝,則不宜使用虛基類。此 外,虛基類增加了系統(tǒng)的時間開銷,使用虛基類 機制時應(yīng)該考慮這個因素。非必要時不要過多地 使用虛基類。,面向?qū)ο蟪绦蛟O(shè)計 第二版,在使用虛基類機制時應(yīng)該注意以下幾點: 必須在最新派生出來的派生類的初始串列中,調(diào)用虛基類的構(gòu)造函數(shù),以初始化在虛基類中定義的數(shù)據(jù)成員。 初始串列中各個基類構(gòu)造函數(shù)的調(diào)用順序是,先調(diào)用虛基類構(gòu)造函數(shù),然后調(diào)用非虛基類構(gòu)造函數(shù)。例如,在本節(jié)給出的示例程序中,在執(zhí)行DD類的構(gòu)造函數(shù)時,先調(diào)用虛基類Base的構(gòu)造函數(shù),然后再調(diào)用普通基類Derived1和Derived2的構(gòu)造函數(shù)。 虛基類的構(gòu)造函數(shù)僅調(diào)用一次,虛基類的構(gòu)造函數(shù)由最新派生
31、出來的派生類負責(zé)調(diào)用。 如果在最新派生出來的派生類的初始串列中,沒有顯式調(diào)用虛基類構(gòu)造函數(shù),則編譯程序?qū)⒄{(diào)用虛基類的缺省構(gòu)造函數(shù)。,7.6 基類與派生類之間的轉(zhuǎn)換,在滿足一定的限定條件的前提下,C+語言可以自動地把一個派生類對象隱式地轉(zhuǎn)換成一個基類對象。 可以在程序中用派生類對象給基類對象賦值。在這種情況下,實際上是用派生類對象從其基類繼承來的數(shù)據(jù)成員的值,給基類對象的相應(yīng)數(shù)據(jù)成員賦值 。 派生類對象擁有的數(shù)據(jù)成員,在基類對象中并不一定都有。如果使用基類對象給派生類對象賦值,則賦值后派生類對象的某些數(shù)據(jù)成員的值將是無意義的。因此, C不允許使用基類對象給派生類對象賦值。,面向?qū)ο蟪绦蛟O(shè)計 第二
32、版,7.6.1 賦值兼容規(guī)則,首先,必須強調(diào)指出的是,能夠自動轉(zhuǎn)換的 前提條件是,派生類從其基類公有派生。例如, 下面定義的兩個類: class Base.; class Derived : public Base.; 則派生類Derived的對象具備自動轉(zhuǎn)換成其基 類Base的對象的條件。,面向?qū)ο蟪绦蛟O(shè)計 第二版,下列幾種情況是合法的: 可以用派生類對象給基類對象賦值。 Base b; Derived d; b=d; 可以用派生類對象來初始化基類的引用。 Derived d; Base ,面向?qū)ο蟪绦蛟O(shè)計 第二版,可以把派生類對象的地址賦值給指向基類的指針。 Derived d; Base *bptr=,在程序設(shè)計中應(yīng)用賦值兼容規(guī)則時必須清楚,對象(或指向?qū)ο蟮闹羔?所能訪問的成員,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 杭州西溪龍舟活動方案
- 晉中政府活動方案
- 暑假夜游活動方案
- 暑期矯正推廣活動方案
- 春節(jié)甜品活動方案
- 暖冬送被子活動方案
- 晨讀領(lǐng)讀示范活動方案
- 暑期蛋糕活動方案
- 月球采樣活動方案
- 普陀區(qū)春節(jié)活動方案
- 中醫(yī)基礎(chǔ)執(zhí)業(yè)醫(yī)師考試試題及答案
- 2025-2030年中國寫字樓行業(yè)市場深度調(diào)研及前景趨勢與投資研究報告
- 人教版(2024)七年級下冊英語Unit 8 Once upon a Time單元集體備課教案(共5課時)
- 診所托管合同協(xié)議
- 質(zhì)量檢驗(測)技術(shù)服務(wù)企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略研究報告
- 信息必刷卷04(廣東省卷專用)2025年中考數(shù)學(xué)(解析版)
- 餐飲服務(wù)與管理課件 菜單的設(shè)計與制作
- 核電進廠考試題及答案
- 公司員工飲水管理制度
- 山東師范大學(xué)《大學(xué)英語本科(專升本)》期末考試復(fù)習(xí)題及參考答案
- 聲譽風(fēng)險培訓(xùn)
評論
0/150
提交評論