第三講 C++面向?qū)ο蟪绦蛟O(shè)計-2_第1頁
第三講 C++面向?qū)ο蟪绦蛟O(shè)計-2_第2頁
第三講 C++面向?qū)ο蟪绦蛟O(shè)計-2_第3頁
第三講 C++面向?qū)ο蟪绦蛟O(shè)計-2_第4頁
第三講 C++面向?qū)ο蟪绦蛟O(shè)計-2_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、 繼承與派生的概念繼承與派生的概念 派生類的聲明方式派生類的聲明方式 派生類的構(gòu)成派生類的構(gòu)成 繼承與派生的概念繼承與派生的概念1.類的關(guān)系類的關(guān)系類的相互關(guān)系而言可以概括為類的相互關(guān)系而言可以概括為: 包容關(guān)系包容關(guān)系(嵌套類嵌套類)和繼承關(guān)系。和繼承關(guān)系。繼繼 承承包包 容容2、基類和派生類、基類和派生類在設(shè)計新類時,允許重用某個原有類的所有特征,并在設(shè)計新類時,允許重用某個原有類的所有特征,并在此基礎(chǔ)上添加新類的新特征。被重用的原有類稱為在此基礎(chǔ)上添加新類的新特征。被重用的原有類稱為基類基類,而新創(chuàng)建的類稱為,而新創(chuàng)建的類稱為派生類派生類。3、單繼承和多繼承、單繼承和多繼承 在在C+中中

2、, 一個子類可由一個父類派生一個子類可由一個父類派生, 也可從多個父也可從多個父類派生類派生, 前者叫前者叫單一繼承單一繼承, 后者叫后者叫多重繼承多重繼承。devicekeyboard mouse screen單繼承單繼承 fruit tree Apple Tree 多繼承多繼承 派生類的聲明方式派生類的聲明方式聲明派生類的一般形式如下:聲明派生類的一般形式如下:class 派生類名派生類名:繼承方式繼承方式 基類名基類名 派生類新增加的成員派生類新增加的成員;繼承方式包括:繼承方式包括: public、private和和protected。 派生類的構(gòu)成派生類的構(gòu)成基類基類int num;

3、char name10;char sex;void display();Student 類數(shù)數(shù)據(jù)據(jù)成成員員成員成員函數(shù)函數(shù)派生類派生類int num;char name10;char sex;void display();Student1 類int age;char addr50;void display();繼承繼承 新增新增 派生類包括兩部分:一部分從基類繼承的;一部分是在聲明派生類時增加的。派生類包括兩部分:一部分從基類繼承的;一部分是在聲明派生類時增加的。每以部分分別包括數(shù)據(jù)成員和成員函數(shù)。每以部分分別包括數(shù)據(jù)成員和成員函數(shù)。訪問控制訪問控制: 用于數(shù)據(jù)的保護(hù)和數(shù)據(jù)封裝用于數(shù)據(jù)的保護(hù)和

4、數(shù)據(jù)封裝C+中,兩種類的訪問方式中,兩種類的訪問方式:1) 水平訪問水平訪問 實例化使用, 類中聲明的訪問控制約束訪問權(quán)限。2)垂直訪問垂直訪問 繼承使用, 子類中的成員函數(shù)對父類成員的訪問。 在討論訪問屬性時,需要考慮以下幾種在討論訪問屬性時,需要考慮以下幾種情況:情況:(1)基類的成員函數(shù)訪問基類成員基類的成員函數(shù)訪問基類成員?(2)派生類的成員函數(shù)訪問派生類的自己派生類的成員函數(shù)訪問派生類的自己 增加的成員增加的成員?(3)基類的成員函數(shù)訪問派生類的成員基類的成員函數(shù)訪問派生類的成員?(4)派生類的成員函數(shù)訪問基類的成員派生類的成員函數(shù)訪問基類的成員?(5)在派生類外訪問派生類的成員在派

5、生類外訪問派生類的成員?(6)在派生類外訪問基類的成員在派生類外訪問基類的成員?說明說明:1) 基類的成員函數(shù)只可以訪問基類成員基類的成員函數(shù)只可以訪問基類成員, 不能訪問不能訪問派生類的成員派生類的成員;2) 派生類的成員函數(shù)訪問派生類的成員派生類的成員函數(shù)訪問派生類的成員; 3) 在派生類外可以訪問派生類公有成員,但不能訪在派生類外可以訪問派生類公有成員,但不能訪問派生類私有成員問派生類私有成員;4) 私有數(shù)據(jù)成員只能被同一類的成員函數(shù)訪問,公私有數(shù)據(jù)成員只能被同一類的成員函數(shù)訪問,公有成員可以被外界訪問,保護(hù)性成員是有選擇性有成員可以被外界訪問,保護(hù)性成員是有選擇性的被訪問。的被訪問。

6、繼承的繼承的3種方式種方式(1)公有繼承方式公有繼承方式(public)(2) 私有繼承方式私有繼承方式(private)(3) 保護(hù)繼承方式保護(hù)繼承方式(protected)(1)公有繼承方式公有繼承方式(public)公有繼承的特點是基類的公有成員和保護(hù)成員作為派生類公有繼承的特點是基類的公有成員和保護(hù)成員作為派生類的成員時,它們都保持原有的狀態(tài),而基類的私有成員仍的成員時,它們都保持原有的狀態(tài),而基類的私有成員仍然是私有的。然是私有的。例如例如: class CStick : public CMeterint m_nStickNum;/ 聲明一個私有數(shù)據(jù)成員聲明一個私有數(shù)據(jù)成員 publ

7、ic:void DispStick(); / 聲明一個公有成員函數(shù)聲明一個公有成員函數(shù);/ 注意分號不能省略注意分號不能省略void CStick: DispStick()m_nStickNum = GetPos();/ 調(diào)用基類調(diào)用基類CMeter的成員函數(shù)的成員函數(shù)coutm_nStickNum ;注意注意: 派生類中或派生類的對象可以使用基類的公有成員派生類中或派生類的對象可以使用基類的公有成員(包括保護(hù)成員包括保護(hù)成員),例如,例如CStick的成員函數(shù)的成員函數(shù)DispStick中調(diào)用中調(diào)用了基類了基類CMeter的的GetPos函數(shù),但基類或基類的對象卻不可函數(shù),但基類或基類的對象

8、卻不可以使用派生類的成員。以使用派生類的成員。 在公有基類的成員在公有基類的成員私有成員私有成員共有成員共有成員保護(hù)成員保護(hù)成員在共有派生類中的訪問屬性在共有派生類中的訪問屬性不可訪問不可訪問共有共有 保護(hù)保護(hù) 表表1 公有基類在派生類中的訪問屬性公有基類在派生類中的訪問屬性(2) 私有繼承方式私有繼承方式(private)私有繼承的特點是基類的公有成員和保護(hù)成員都作為派生私有繼承的特點是基類的公有成員和保護(hù)成員都作為派生類的私有成員,并且不能被這個派生類的子類所訪問。類的私有成員,并且不能被這個派生類的子類所訪問。 在私有基類的成員在私有基類的成員私有成員私有成員共有成員共有成員保護(hù)成員保護(hù)

9、成員在私有派生類中的訪問屬性在私有派生類中的訪問屬性不可訪問不可訪問私有私有私有私有 表表2 私有基類在派生類中的訪問屬性私有基類在派生類中的訪問屬性#include class CMeterpublic:CMeter(int nPos = 10) m_nPos = nPos; CMeter() void StepIt() m_nPos+; int GetPos()return m_nPos; protected:void SetPos(int nPos) m_nPos = nPos; private:int m_nPos;class CStick : private CMeter / 從從C

10、Meter派生,私有繼承派生,私有繼承int m_nStickNum;/ 聲明一個私有數(shù)據(jù)成員聲明一個私有數(shù)據(jù)成員public:void DispStick();/ 聲明一個公有成員函數(shù)聲明一個公有成員函數(shù)void SetStick(int nPos) SetPos(nPos);int GetStick() return GetPos();例例3.4-1 派生類的私有繼承示例。派生類的私有繼承示例。 void CStick: DispStick() m_nStickNum = GetPos(); / 調(diào)用基類調(diào)用基類CMeter的成員函數(shù)的成員函數(shù)coutm_nStickNum ; void

11、main() CMeter oMeter(20); CStick oStick; coutCMeter:oMeter.GetPos(),CStick: oStick.GetStick()endl; oMeter.StepIt(); coutCMeter:oMeter.GetPos(),CStick: oStick.GetStick()endl; oStick.DispStick(); (3) 保護(hù)繼承方式保護(hù)繼承方式(protected)特點是基類的所有公有成員和保護(hù)成員都成為派生類的保特點是基類的所有公有成員和保護(hù)成員都成為派生類的保護(hù)成員,并且只能被它的派生類成員函數(shù)或友元訪問,基護(hù)成員,

12、并且只能被它的派生類成員函數(shù)或友元訪問,基類的私有成員仍然是私有的。類的私有成員仍然是私有的。在保護(hù)基類的成員在保護(hù)基類的成員私有成員私有成員共有成員共有成員保護(hù)成員保護(hù)成員在保護(hù)派生類中的訪問屬性在保護(hù)派生類中的訪問屬性不可訪問不可訪問保護(hù)保護(hù)保護(hù)保護(hù)表表3 保護(hù)基類在派生類中的訪問屬性保護(hù)基類在派生類中的訪問屬性表表4 不同繼承方式的基類特性和派生類特性不同繼承方式的基類特性和派生類特性小結(jié)小結(jié)1:基類特征基類特征繼承方式繼承方式派生類特征派生類特征publicpublic公有繼承公有繼承publicpublicprivateprivate不可訪問不可訪問protectedprotecte

13、dprotectedprotectedpublicpublic私有繼承私有繼承privateprivateprivateprivate不可訪問不可訪問protectedprotectedprivateprivatepublicpublic保護(hù)繼承保護(hù)繼承protectedprotectedprivateprivate不可訪問不可訪問protectedprotectedprotectedprotected表表5 派生類中的成員的訪問屬性派生類中的成員的訪問屬性小結(jié)小結(jié)2:注意注意: 一定要區(qū)分清楚派生類的對象和派生類中的成員函數(shù)對基類的訪一定要區(qū)分清楚派生類的對象和派生類中的成員函數(shù)對基類的訪問

14、是不同的。例如,問是不同的。例如, (1) 在公有繼承時,派生類的對象可以訪問基類中的公有成員,派生在公有繼承時,派生類的對象可以訪問基類中的公有成員,派生類的成員函數(shù)可以訪問基類中的公有成員和保護(hù)成員。類的成員函數(shù)可以訪問基類中的公有成員和保護(hù)成員。 (2) 在私有繼承和保護(hù)繼承時,基類的所有成員不能被派生類的對象在私有繼承和保護(hù)繼承時,基類的所有成員不能被派生類的對象訪問,而派生類的成員函數(shù)可以訪問基類中的公有成員和保護(hù)成員。訪問,而派生類的成員函數(shù)可以訪問基類中的公有成員和保護(hù)成員。 派生類中的成員派生類中的成員在派生類中在派生類中在派生類外部在派生類外部在下層派生類中在下層派生類中公用

15、性成員公用性成員可以可以 可以可以 可以可以 保護(hù)性成員保護(hù)性成員可以可以 不可以不可以 可以可以 私有性成員私有性成員可以可以 不可以不可以 不可以不可以 1、簡單派生類的構(gòu)造函數(shù)、簡單派生類的構(gòu)造函數(shù)l 派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)被執(zhí)行時,基類相應(yīng)的構(gòu)造派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)被執(zhí)行時,基類相應(yīng)的構(gòu)造函數(shù)和析構(gòu)函數(shù)也會被執(zhí)行。函數(shù)和析構(gòu)函數(shù)也會被執(zhí)行。l 派生類對象在建立時,派生類對象在建立時,先執(zhí)行先執(zhí)行基類的構(gòu)造函數(shù),基類的構(gòu)造函數(shù),然后執(zhí)行然后執(zhí)行派生類的構(gòu)造函數(shù)。但對于析構(gòu)函數(shù)來說,其順序剛好相反,派生類的構(gòu)造函數(shù)。但對于析構(gòu)函數(shù)來說,其順序剛好相反,先執(zhí)行派生類的析構(gòu)函數(shù),而后

16、執(zhí)行基類的析構(gòu)函數(shù)。先執(zhí)行派生類的析構(gòu)函數(shù),而后執(zhí)行基類的析構(gòu)函數(shù)。l更需要注意不同派生類構(gòu)造函數(shù)的格式。更需要注意不同派生類構(gòu)造函數(shù)的格式。2、有子對象的派生類的構(gòu)造函數(shù)、有子對象的派生類的構(gòu)造函數(shù)3、有多層派生時的構(gòu)造函數(shù)、有多層派生時的構(gòu)造函數(shù)1、簡單派生類的構(gòu)造函數(shù)、簡單派生類的構(gòu)造函數(shù)其一般形式為:其一般形式為:派生類構(gòu)造函數(shù)名(總參數(shù)列表)派生類構(gòu)造函數(shù)名(總參數(shù)列表): 基類構(gòu)造函數(shù)名(參數(shù)列表)基類構(gòu)造函數(shù)名(參數(shù)列表) 派生類中新增數(shù)據(jù)成員初始化語句;派生類中新增數(shù)據(jù)成員初始化語句;class Student public:Student (int n, char *nam,

17、 char s) num=n; name=nam; sex=s; ;class Student1:public Student public:Student1(int n, char *nam, char s, int a, char *addr):Student(n,nam,s) age=a; address=addr; ;2、有子對象的派生類的構(gòu)造函數(shù)、有子對象的派生類的構(gòu)造函數(shù)其一般形式為:其一般形式為:派生類構(gòu)造函數(shù)名(總參數(shù)列表)派生類構(gòu)造函數(shù)名(總參數(shù)列表): 基類構(gòu)造函數(shù)名(參數(shù)列表)基類構(gòu)造函數(shù)名(參數(shù)列表), 子對象名(參數(shù)列表)子對象名(參數(shù)列表) 派生類中新增數(shù)據(jù)成員初始

18、化語句;派生類中新增數(shù)據(jù)成員初始化語句;類的數(shù)據(jù)成員包含類對象,此數(shù)據(jù)成員叫做該類的子對象。類的數(shù)據(jù)成員包含類對象,此數(shù)據(jù)成員叫做該類的子對象。class Student public:Student (int n, char *nam, char s) num=n; name=nam; sex=s; ;class Student1:public Student public:Student1( int n, char *nam, int n1, char s, char *nam1, char s1, int a, char *addr) :Student(n,nam,s), monitor

19、(n1,nam1,s1) age=a; address=addr; private: Student monitor; ;3、有多層派生時的構(gòu)造函數(shù)、有多層派生時的構(gòu)造函數(shù) 格式與格式與“有子對象派生時的構(gòu)造函數(shù)有子對象派生時的構(gòu)造函數(shù)”同,但要注意,同,但要注意,不要列出每一層派生的構(gòu)造函數(shù),只需寫出上一層派生不要列出每一層派生的構(gòu)造函數(shù),只需寫出上一層派生類的構(gòu)造函數(shù)即可。類的構(gòu)造函數(shù)即可。例例3.4-2 多層派生的構(gòu)造函數(shù)。多層派生的構(gòu)造函數(shù)。 注意:構(gòu)造函數(shù)的書寫格式。注意:構(gòu)造函數(shù)的書寫格式。 #includeclass Studentpublic: Student(int n,ch

20、ar *nam) num=n;name=nam; void display() coutnum:numendl;coutname:nameendl; protected:int num;char *name;class Student1:public Studentpublic:Student1(int n,char nam10,int a): Student(n,nam) age=a; void show() display();coutage:ageendl; protected:int age;class Student2:public Student1public: Student2(

21、int n,char nam10, int a,int s):Student1(n,nam,a) score=s; void show_all() show();coutscore:scoreendl; protected:int score;int main() Student2 stud(10010,Li,20,92); stud.show_all(); return 0; l 在類的繼承中,在類的繼承中, C+允許一個派生類繼承多個基類,這種允許一個派生類繼承多個基類,這種行為稱為行為稱為多繼承多繼承(multiple inheritance)。l 這種多繼承的方式可使派生類具有多個基類

22、的特性,大大這種多繼承的方式可使派生類具有多個基類的特性,大大提高了程序代碼的可重用性。提高了程序代碼的可重用性。l多繼承下派生類的定義的格式:多繼承下派生類的定義的格式:class : , ,. ;其中的繼承方式還是前面的三種:其中的繼承方式還是前面的三種:public、private和和protected。class A.class B.class C:public A,private B.派生類派生類C的成員包含了基類的成員包含了基類A中成員和中成員和B中成員中成員以及該類本身的成員。以及該類本身的成員。允許一個基類有多個派生類以及從一個基類的允許一個基類有多個派生類以及從一個基類的派生

23、類中再進(jìn)行多個層次的派生。派生類中再進(jìn)行多個層次的派生。 例如:例如:l 多繼承派生類的構(gòu)造函數(shù)多繼承派生類的構(gòu)造函數(shù) (總參表總參表) : (參數(shù)表參數(shù)表1), (參數(shù)表參數(shù)表2), , (參數(shù)表參數(shù)表n) 派生類中新增數(shù)據(jù)成員初始化語句;派生類中新增數(shù)據(jù)成員初始化語句;格式:格式:例例3.4-3 聲明一個教師(聲明一個教師(Teacher)類和一個學(xué)生類()類和一個學(xué)生類(Student)類,)類,用多重繼承的方式聲明一個研究生(用多重繼承的方式聲明一個研究生(Graduate)類,)類,研究生類包括了教研究生類包括了教師類和學(xué)生類的所有成員以及新增了師類和學(xué)生類的所有成員以及新增了wag

24、e(工資工資)成員成員。 教師類中包括數(shù)據(jù)教師類中包括數(shù)據(jù)成員成員name(姓名),(姓名),age(年齡年齡),title(職稱職稱), 學(xué)生類中包括數(shù)據(jù)成員學(xué)生類中包括數(shù)據(jù)成員name1(姓名姓名),sex(性別),(性別),score(成績)。在定義派生類對象時給(成績)。在定義派生類對象時給出初始化的數(shù)據(jù),并輸出這些數(shù)據(jù)。出初始化的數(shù)據(jù),并輸出這些數(shù)據(jù)。#includeclass Teacherpublic: Teacher(char *nam,int a, char *t) name=nam;age=a;title=t; protected:char *name;int age;ch

25、ar *title; ;class Student public: Student(char *nam1,char se,float sc) name1=nam1; sex=se; score=sc; protected: char *name1; char sex;float score; ;class Graduate: public Teacher,public Studentpublic: Graduate(char *nam,int a, char *t, char se,float sc,float w): Teacher(nam, a, t),Student( nam, se,

26、sc), wage(w) void show() coutname: nameendl; coutage: ageendl; couttitle: titleendl; coutsex: sexendl; coutscore: scoreendl; coutwage: wageendl; private:float wage;int main() Graduate grad(Yang_Li,28, 教授教授, m,92.5,5500); grad.show(); return 0;l 多繼承引起的二義性問題多繼承引起的二義性問題1、兩個基類有同名成員、兩個基類有同名成員A類類int num1;

27、void display();B類類int num1;void display();C類類int num1;void display();int num1;void display();int num2;void show();基類基類A的成員的成員基類基類B的成員的成員派生類派生類C的新增成員的新增成員l 多繼承引起的二義性問題多繼承引起的二義性問題2、兩個基類和派生類三者都有同名成員、兩個基類和派生類三者都有同名成員A類類int num1;void display();B類類int num1;void display();C類類int num1;void display();int num

28、1;void display();int num1;void show();基類基類A的成員的成員基類基類B的成員的成員派生類派生類C的新增成員的新增成員int num2;l 多繼承引起的二義性問題多繼承引起的二義性問題3、多個基類從同一個基類派生、多個基類從同一個基類派生A類類C類類B1類類B2類類class Apublic: int a; void fun();class B1:public Apublic: int b1;class B2:public Apublic: int b2;class C:public B1,public B2public: int f( ); A,B1,B2

29、和和C類之間關(guān)系如下:類之間關(guān)系如下: A Aa,fun() a,fun() B1 B2 b1 b2 C f( )當(dāng)當(dāng)C c1;時,時,則則c1.a和和c1.A a都有二義性。都有二義性。 A類類 int a;void fun(); B1類類 int b1; B2類類 int b2; C類類 int B1:a; int a;void fun(); int a;void fun(); int B2:a; int b1; int b2;void B1:fun(); int B1:a; int B2:a; int b1;void B2:fun();int f (); C類類 int b2;void

30、fun(); int b1;int f (); int a;virtual 虛基類的作用虛基類的作用 虛基類的初始化虛基類的初始化 虛基類的簡單應(yīng)用虛基類的簡單應(yīng)用 虛基類的聲明虛基類的聲明 虛基類的作用虛基類的作用l 派生類派生類B1和和B2都從基類都從基類A繼承,這時在派生類中就有繼承,這時在派生類中就有兩個基類兩個基類A的拷貝。當(dāng)編譯器編譯到的拷貝。當(dāng)編譯器編譯到“cout”a = “aendl;”語句時,因無法確定成員語句時,因無法確定成員a是從類是從類B1中繼承中繼承來的,還是從類來的,還是從類B2繼承來,產(chǎn)生了二義性,從而出現(xiàn)編譯繼承來,產(chǎn)生了二義性,從而出現(xiàn)編譯錯誤。錯誤。l 解

31、決這個問題的方法之一是使用域作用運算符解決這個問題的方法之一是使用域作用運算符“ :”來來消除二義性。消除二義性。l 使用虛基類的目的是在多重派生的過程中,使公有的基使用虛基類的目的是在多重派生的過程中,使公有的基類在派生類中只有一個拷貝,從而解決上述這種二義性問類在派生類中只有一個拷貝,從而解決上述這種二義性問題。題。 虛基類的聲明虛基類的聲明l 虛基類的聲明不是在聲明基類時聲明的,而是在聲明派虛基類的聲明不是在聲明基類時聲明的,而是在聲明派生類時,指定繼承方式時聲明的。生類時,指定繼承方式時聲明的。 l聲明虛基類的一般形式為:聲明虛基類的一般形式為: calss 派生類名派生類名 : vi

32、rtual 繼承方式繼承方式 基類名基類名class A;class B: virtual public A;class C: virtual public A;例如:例如:l 虛基類可以在生成一個派生類時作為虛基類,而在生成虛基類可以在生成一個派生類時作為虛基類,而在生成另一個派生類時不作為虛基類。另一個派生類時不作為虛基類。 虛基類的初始化虛基類的初始化l C+規(guī)定,由虛基類經(jīng)過一次或多次派生出來規(guī)定,由虛基類經(jīng)過一次或多次派生出來的派生類,在其每一個派生類的構(gòu)造函數(shù)的成員的派生類,在其每一個派生類的構(gòu)造函數(shù)的成員初始化列表中必須給出對虛基類的構(gòu)造函數(shù)的調(diào)初始化列表中必須給出對虛基類的構(gòu)造

33、函數(shù)的調(diào)用,如果沒有列出,則調(diào)用虛基類的默認(rèn)構(gòu)造函用,如果沒有列出,則調(diào)用虛基類的默認(rèn)構(gòu)造函數(shù)。數(shù)。例如:例如:3.4-4l 出現(xiàn)多次調(diào)用虛基類的構(gòu)造函數(shù)時,出現(xiàn)多次調(diào)用虛基類的構(gòu)造函數(shù)時,C+編譯編譯系統(tǒng)只執(zhí)行最后的派生類對虛基類的構(gòu)造函數(shù)的系統(tǒng)只執(zhí)行最后的派生類對虛基類的構(gòu)造函數(shù)的調(diào)用。調(diào)用。例如:例如:3.4-5 虛基類的簡單應(yīng)用虛基類的簡單應(yīng)用例例3.4-4 在例在例3.4-3基礎(chǔ)上,在基礎(chǔ)上,在Teacher類和類和Student類之上增加了一類之上增加了一個共同的基類個共同的基類Person。如下圖。作為人員的一些基本數(shù)據(jù)都放在。如下圖。作為人員的一些基本數(shù)據(jù)都放在Peoson類中

34、,在類中,在Teacher類和類和Student類中再增加一些必要的數(shù)據(jù)。類中再增加一些必要的數(shù)據(jù)。Person類類Graduate類類Teacher類類Student類類#includeclass Personpublic: Person( char *nam, char s ,int a) name=nam; sex=s;age=a;protected: char *name; char sex; int age;class Teacher: virtual public Personpublic: Teacher(char *nam,char s,int a, char *t): Per

35、son(nam,s,a), title(t) protected: char *title; ;class Student : virtual public Personpublic: Student(char *nam1,char se,int a,float sc) :Person(nam1,se,a) score=sc; protected: float score; ;class Graduate: public Teacher,public Studentpublic: Graduate(char *nam,char s,int a, char *t,float sc,float w

36、): Person(nam,s,a),Teacher(nam, s, a, t),Student( nam, s,a, sc) wage=w; void show() coutname: nameendl; coutage: ageendl; couttitle: titleendl; coutsex: sexendl; coutscore: scoreendl; coutwage: wageendl; private: float wage;int main() Graduate grad(Yang_Li, m, 28, 教授教授,92.5,5500); grad.show(); retur

37、n 0;例例3.4-5 虛基類的使用。虛基類的使用。#include class Apublic: int a; A(int x = 0) a = x; ;class B1 : virtual public Apublic: int b1; B1( int x = 0, int y = 0):A(x)b1 = y; void print() coutB1:a= a,b1=b1endl; ;class B2 : virtual public Apublic: int b2; B2( int x = 0, int y = 0):A(x)b2 = y; void print() coutB2:a=

38、a,b2=b2endl; ;class C : public B1, public B2 public: int c; C(int x, int y, int m, int n,int s): B1(x,y), B2(m,n) c = s; void print() B1:print(); B2:print(); coutc = cendl; ; void main() C c1(100,200,300,400,500); c1.print(); c1.a=1000; c1.print(); l 在一個類中,以另一個類的對象作為數(shù)據(jù)成員在一個類中,以另一個類的對象作為數(shù)據(jù)成員的,稱為的,稱為類的組合類的組合。例如:例如:class Personpublic: char *name; int age; char sex;

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論