大學計算機程序設計8《繼承》_第1頁
大學計算機程序設計8《繼承》_第2頁
大學計算機程序設計8《繼承》_第3頁
大學計算機程序設計8《繼承》_第4頁
大學計算機程序設計8《繼承》_第5頁
已閱讀5頁,還剩83頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、不具有對稱性不具有對稱性 不是所有植物都屬于蕨類傳遞性傳遞性 高等植物、蕨類植物、芒萁都是植物,具有植物的共同特征 植物植物 低等植物低等植物高等植物高等植物藻類藻類菌類菌類地衣類地衣類苔蘚類苔蘚類蕨類蕨類裸子類裸子類被子類被子類地錢地錢小金發(fā)草小金發(fā)草毛蕨毛蕨芒萁芒萁杉木杉木柏木柏木荔枝荔枝橘子橘子 重用重用& &認識習慣認識習慣 繼承是面向對象程序設計實現(xiàn)軟件繼承是面向對象程序設計實現(xiàn)軟件重用的重要方法。程序員可以在已有基類的基礎上定義新的派生類。重用的重要方法。程序員可以在已有基類的基礎上定義新的派生類。 構造與雜交構造與雜交 多繼承的派生類有多個基類。多繼承的派生類有多個基類。 訪問控

2、制訪問控制 派生類對基類成員的訪問由繼承方式和成員性質決派生類對基類成員的訪問由繼承方式和成員性質決定。定。 8.1 8.1 類之間的關系類之間的關系8.2 8.2 基類和派生類基類和派生類8.3 8.3 基類的初始化基類的初始化8.4 8.4 繼承的應用實例繼承的應用實例8.5 8.5 多繼承多繼承 包含關系,用以描述一個類由多個包含關系,用以描述一個類由多個“ “部件類部件類” ”構成。實現(xiàn)構成。實現(xiàn)has-Ahas-A關系用類成員表示,即一個類中的數(shù)據(jù)成員是另一種已經(jīng)定義的類。關系用類成員表示,即一個類中的數(shù)據(jù)成員是另一種已經(jīng)定義的類。 一個類部分地使用另一個類。通過類之間成員函數(shù)的相互

3、聯(lián)一個類部分地使用另一個類。通過類之間成員函數(shù)的相互聯(lián)系,定義友元或對象參數(shù)傳遞實現(xiàn)。系,定義友元或對象參數(shù)傳遞實現(xiàn)。 機制稱為機制稱為“ “繼承繼承” ”。關系具有傳遞性。關系具有傳遞性, ,不具有對稱性。不具有對稱性。 一個一個 B 類繼承類繼承A類,或稱從類類,或稱從類 A 派生類派生類 B 類類 A 稱為基類(父類),類稱為基類(父類),類 B 稱為派生類(子類)稱為派生類(子類)AB1B2C1C2C3B1,B2 的基類的基類A 的派生類的派生類C1,C2,C3 的基類的基類A 的派生類(單繼承)的派生類(單繼承)C3的基類的基類B1,B2 的派生類(多繼承)的派生類(多繼承)B1 的

4、派生類的派生類類繼承關系的語法形式類繼承關系的語法形式class 派生類名 : 基類名表基類名表 數(shù)據(jù)成員和成員函數(shù)聲明 ;基類名表基類名表 構成構成訪問控制訪問控制 基類名基類名1, 訪問控制訪問控制 基類名基類名2 , , 訪問控制訪問控制 基類名基類名n類繼承關系的語法形式類繼承關系的語法形式class 派生類名派生類名 : 基類名表基類名表 數(shù)據(jù)成員和成員函數(shù)聲明數(shù)據(jù)成員和成員函數(shù)聲明 ;基類名表基類名表 構成構成訪問控制訪問控制 基類名基類名1, 訪問控制訪問控制 基類名基類名2 , , 訪問控制訪問控制 基類名基類名n訪問控制訪問控制 表示派生類對基類的繼承方式,使用關鍵字:表示派

5、生類對基類的繼承方式,使用關鍵字: 公有繼承公有繼承 私有繼承私有繼承 保護繼承保護繼承派生類對基類成員的使用,與繼承訪問控制和基類中成員性質有關派生類對基類成員的使用,與繼承訪問控制和基類中成員性質有關公有繼承公有繼承基類的公有成員基類的公有成員派生類的公有成員派生類的公有成員 基類的保護成員基類的保護成員派生類的保護成員派生類的保護成員私有繼承私有繼承 基類的公有成員和保護成員基類的公有成員和保護成員派生類的私有成員派生類的私有成員保護繼承保護繼承 基類的公有成員和保護成員基類的公有成員和保護成員派生類的保護成員派生類的保護成員不論種方式繼承基類,派生類都不能直接使用基類的私有成員不論種方

6、式繼承基類,派生類都不能直接使用基類的私有成員 8.2.1 訪問控制8.2.1 8.2.1 訪問控制訪問控制8.2.1 訪問控制1.1.公有繼承公有繼承public 成員成員 public 成員成員protected 成員成員 protected 成員成員private 成員成員public 成員成員protected 成員成員private 成員成員基類基類派生類派生類#includeusing namespace std ;class A public : void get_XY() cout x y ; void put_XY() cout x = x , y = y n ; prote

7、cted: int x, y ;class B : public A public : int get_S() return s ; ; void make_S() s = x * y ; ; / 使用基類數(shù)據(jù)成員使用基類數(shù)據(jù)成員x,y protected: int s;class C : public B public : void get_H() cout h ; int get_V() return v ; void make_V() make_S(); v = get_S() * h ; / 使用基類成員函數(shù)使用基類成員函數(shù) protected: int h, v;例例8-1 公有繼承

8、的測試公有繼承的測試 int main() A objA ; B objB ; C objC ; cout It is object_A :n ; objA.get_XY() ; objA.put_XY() ; cout It is object_B :n ; objB.get_XY() ; objB.make_S() ; cout S = objB.get_S() endl ; cout It is object_C :n ; objC.get_XY() ; objC.get_H(); objC.make_V() ; cout V = objC.get_V() endl ;8.2.1 訪問控

9、制例例8-1 公有繼承的測試公有繼承的測試 int main() A objA ; B objB ; C objC ; cout It is object_A :n ; objA.get_XY() ; objA.put_XY() ; cout It is object_B :n ; objB.get_XY() ; objB.make_S() ; cout S = objB.get_S() endl ; cout It is object_C :n ; objC.get_XY() ; objC.get_H(); objC.make_V() ; cout V = objC.get_V() endl

10、 ;objA.yobjA.xobjAx y 8.2.1 訪問控制例例8-1 公有繼承的測試公有繼承的測試 int main() A objA ; B objB ; C objC ; cout It is object_A :n ; objA.get_XY() ; objA.put_XY() ; cout It is object_B :n ; objB.get_XY() ; objB.make_S() ; cout S = objB.get_S() endl ; cout It is object_C :n ; objC.get_XY() ; objC.get_H(); objC.make_V

11、() ; cout V = objC.get_V() endl ;objA.yobjA.xobjAx y objB.sobjB.yobjB.xobjBs8.2.1 訪問控制例例8-1 公有繼承的測試公有繼承的測試 int main() A objA ; B objB ; C objC ; cout It is object_A :n ; objA.get_XY() ; objA.put_XY() ; cout It is object_B :n ; objB.get_XY() ; objB.make_S() ; cout S = objB.get_S() endl ; cout It is o

12、bject_C :n ; objC.get_XY() ; objC.get_H(); objC.make_V() ; cout V = objC.get_V() endl ;objA.yobjA.xobjAobjB.sobjB.yobjB.xobjBx y sobjC.hobjC.vobjC.sobjC.yobjC.xobjCh v 8.2.1 訪問控制例例8-1 公有繼承的測試公有繼承的測試 int main() A objA ; B objB ; C objC ; cout It is object_A :n ; objA.get_XY() ; objA.put_XY() ; cout I

13、t is object_B :n ; objB.get_XY() ; objB.make_S() ; cout S = objB.get_S() endl ; cout It is object_C :n ; objC.get_XY() ; objC.get_H(); objC.make_V() ; cout V = objC.get_V() endl ;objA.yobjA.xobjAobjB.sobjB.yobjB.xobjBobjC.hobjC.vobjC.sobjC.yobjC.xobjC對對 objA 的的數(shù)據(jù)成員操作數(shù)據(jù)成員操作x y sh v 8.2.1 訪問控制例例8-1 公有

14、繼承的測試公有繼承的測試 int main() A objA ; B objB ; C objC ; cout It is object_A :n ; objA.get_XY() ; objA.put_XY() ; cout It is object_B :n ; objB.get_XY() ; objB.make_S() ; cout S = objB.get_S() endl ; cout It is object_C :n ; objC.get_XY() ; objC.get_H(); objC.make_V() ; cout V = objC.get_V() endl ;objA.yo

15、bjA.xobjAobjB.sobjB.yobjB.xobjBobjC.hobjC.vobjC.sobjC.yobjC.xobjC調(diào)用基類調(diào)用基類A成員函數(shù)成員函數(shù)對對 objB 的數(shù)據(jù)成員操作的數(shù)據(jù)成員操作x y sh v 8.2.1 訪問控制例例8-1 公有繼承的測試公有繼承的測試 int main() A objA ; B objB ; C objC ; cout It is object_A :n ; objA.get_XY() ; objA.put_XY() ; cout It is object_B :n ; objB.get_XY() ; objB.make_S() ; cout

16、 S = objB.get_S() endl ; cout It is object_C :n ; objC.get_XY() ; objC.get_H(); objC.make_V() ; cout V = objC.get_V() endl ;objA.yobjA.xobjAobjB.sobjB.yobjB.xobjBobjC.hobjC.vobjC.sobjC.yobjC.xobjC調(diào)用派生類調(diào)用派生類B成員函數(shù)成員函數(shù)對對 objB 的數(shù)據(jù)成員操作的數(shù)據(jù)成員操作x y sh v 8.2.1 訪問控制例例8-1 公有繼承的測試公有繼承的測試 int main() A objA ; B o

17、bjB ; C objC ; cout It is object_A :n ; objA.get_XY() ; objA.put_XY() ; cout It is object_B :n ; objB.get_XY() ; objB.make_S() ; cout S = objB.get_S() endl ; cout It is object_C :n ; objC.get_XY() ; objC.get_H(); objC.make_V() ; cout V = objC.get_V() endl ;objA.yobjA.xobjAobjB.sobjB.yobjB.xobjBobjC.

18、hobjC.vobjC.sobjC.yobjC.xobjC調(diào)用基類調(diào)用基類A成員函數(shù)成員函數(shù)對對 objC 的數(shù)據(jù)成員操作的數(shù)據(jù)成員操作x y sh v 8.2.1 訪問控制例例8-1 公有繼承的測試公有繼承的測試 int main() A objA ; B objB ; C objC ; cout It is object_A :n ; objA.get_XY() ; objA.put_XY() ; cout It is object_B :n ; objB.get_XY() ; objB.make_S() ; cout S = objB.get_S() endl ; cout It is

19、object_C :n ; objC.get_XY() ; objC.get_H(); objC.make_V() ; cout V = objC.get_V() endl ;objA.yobjA.xobjAobjB.sobjB.yobjB.xobjBobjC.hobjC.vobjC.sobjC.yobjC.xobjC調(diào)用派生類調(diào)用派生類C成員函數(shù)成員函數(shù)對對 objC 的數(shù)據(jù)成員操作的數(shù)據(jù)成員操作x y sh v 8.2.1 訪問控制例例8-1 公有繼承的測試公有繼承的測試 int main() A objA ; B objB ; C objC ; cout It is object_A :

20、n ; objA.get_XY() ; objA.put_XY() ; cout It is object_B :n ; objB.get_XY() ; objB.make_S() ; cout S = objB.get_S() endl ; cout It is object_C :n ; objC.get_XY() ; objC.get_H(); objC.make_V() ; cout V = objC.get_V() endl ;objA.yobjA.xobjAobjB.sobjB.yobjB.xobjBobjC.hobjC.vobjC.sobjC.yobjC.xobjCx y sh

21、v 8.2.1 訪問控制例例8-1 公有繼承的測試公有繼承的測試 8.2.1 訪問控制public 成員成員protected 成員成員private 成員成員public 成員成員protected 成員成員private 成員成員基類基類派生類派生類private 成員成員private 成員成員2.2.私有繼承私有繼承#includeusing namespace std ;class A public : void get_XY() cout x y ; void put_XY() cout x = x , y = y n ; protected: int x, y ;class B

22、: private A public : int get_S() return s ; void make_S() get_XY(); s = x * y ; private: int s ;int main() B objB ; cout It is object_B :n ; objB.make_S() ; cout S = objB.get_S() endl ; 例例8-2 私有繼承的測試私有繼承的測試 class B : private Aclass A objB.sobjB.yobjB.xobjBprivate成員成員8.2.1 訪問控制#includeusing namespace

23、 std ;class A public : void get_XY() cout x y ; void put_XY() cout x = x , y = y n ; protected: int x, y ;class B : private A public : int get_S() return s ; void make_S() get_XY(); s = x * y ; private: int s ;int main() B objB ; cout It is object_B :n ; objB.make_S() ; cout S = objB.get_S() endl ;

24、class B : private Aclass A 調(diào)用基類成員函數(shù)調(diào)用基類成員函數(shù)objB.sobjB.yobjB.xobjBprivate成員成員8.2.1 訪問控制例例8-2 私有繼承的測試私有繼承的測試 #includeusing namespace std ;class A public : void get_XY() cout x y ; void put_XY() cout x = x , y = y n ; protected: int x, y ;class B : private A public : int get_S() return s ; void make_S(

25、) get_XY(); s = x * y ; private: int s ;int main() B objB ; cout It is object_B :n ; objB.make_S() ; cout S = objB.get_S() endl ; class B : private Aclass A 訪問私有數(shù)據(jù)成員訪問私有數(shù)據(jù)成員objB.sobjB.yobjB.xobjBprivate成員成員8.2.1 訪問控制例例8-2 私有繼承的測試私有繼承的測試 #includeusing namespace std ;class A public : void get_XY() cou

26、t x y ; void put_XY() cout x = x , y = y n ; protected: int x, y ;class B : private A public : int get_S() return s ; void make_S() get_XY(); s = x * y ; private: int s ;int main() B objB ; cout It is object_B :n ; objB.make_S() ; cout S = objB.get_S() endl ; class B : private Aclass A objB.sobjB.yo

27、bjB.xobjBprivate成員成員8.2.1 訪問控制例例8-2 私有繼承的測試私有繼承的測試 8.2.1 訪問控制public 成員成員protected 成員成員private 成員成員public 成員成員protected 成員成員private 成員成員基類基類派生類派生類protected 成員成員protected 成員成員3.3.保護繼承保護繼承訪問申明w 使得派生類中不可見成員變?yōu)榭稍L問w 語法基類名:成員名注意w 訪問聲明僅調(diào)整名字的訪問權限不可說明為任何類型w 不允許降低或者提升基類成員可訪問性w 對重載函數(shù)同名重載函數(shù) 都起作用不同訪問域重載函數(shù) 不能派生類和基類

28、重名 不可 派生類定義了與基類同名的成員,在派生類中訪問同名成員派生類定義了與基類同名的成員,在派生類中訪問同名成員 時屏蔽了基類的同名成員時屏蔽了基類的同名成員 在派生類中使用基類的同名成員,顯式地使用類名限定符:在派生類中使用基類的同名成員,顯式地使用類名限定符:類名類名 : 成員成員 8.2.2 重名成員8.2.2 8.2.2 重名成員重名成員例:例:class base public : int a , b ; ;class derived : public base public : int b , c ; ;void f () derived d ; d . a = 1 ; d .

29、 base : b = 2 ; d . b = 3 ; d . c = 4 ;8.2.2 重名成員1.1.重名數(shù)據(jù)成員重名數(shù)據(jù)成員base a b derived a b 例:例:class base public : int a , b ; ;class derived : public base public : int b , c ; ;void f () derived d ; d . a = 1 ; d . base : b = 2 ; d . b = 3 ; d . c = 4 ;8.2.2 重名成員1.1.重名數(shù)據(jù)成員重名數(shù)據(jù)成員base a b derived derived

30、a b 例:例:class base public : int a , b ; ;class derived : public base public : int b , c ; ;void f () derived d ; d . a = 1 ; d . base : b = 2 ; d . b = 3 ; d . c = 4 ;8.2.2 重名成員base a b 1derived derived a b 訪問從訪問從base 類繼承類繼承的數(shù)據(jù)成員的數(shù)據(jù)成員a1.1.重名數(shù)據(jù)成員重名數(shù)據(jù)成員例:例:class base public : int a , b ; ;class derive

31、d : public base public : int b , c ; ;void f () derived d ; d . a = 1 ; d . base : b = 2 ; d . b = 3 ; d . c = 4 ;8.2.2 重名成員訪問從訪問從base 類類繼承的繼承的 bbase a b 21derived derived a b 1.1.重名數(shù)據(jù)成員重名數(shù)據(jù)成員例:例:class base public : int a , b ; ;class derived : public base public : int b , c ; ;void f () derived d ;

32、 d . a = 1 ; d . base : b = 2 ; d . b = 3 ; d . c = 4 ;8.2.2 重名成員訪問訪問derived 類定義類定義的數(shù)據(jù)成員的數(shù)據(jù)成員bbase a b 321derived derived a b 1.1.重名數(shù)據(jù)成員重名數(shù)據(jù)成員例:例:class base public : int a , b ; ;class derived : public base public : int b , c ; ;void f () derived d ; d . a = 1 ; d . base : b = 2 ; d . b = 3 ; d . c

33、= 4 ;8.2.2 重名成員訪問訪問derived 類類定義的數(shù)據(jù)成員定義的數(shù)據(jù)成員cbase a b 4321derived derived a b 1.1.重名數(shù)據(jù)成員重名數(shù)據(jù)成員例:例:class base public : int a , b ; ;class derived : public base public : int b , c ; ;void f () derived d ; d . a = 1 ; d . base : b = 2 ; d . b = 3 ; d . c = 4 ;8.2.2 重名成員base a b 4321derived derived a b 基

34、類成員的作用域延伸到所有派生類基類成員的作用域延伸到所有派生類派生類的重名成員屏蔽基類的同名成員派生類的重名成員屏蔽基類的同名成員1.1.重名數(shù)據(jù)成員重名數(shù)據(jù)成員#include/例例8-4using namespace std ;class A public: int a1, a2 ; A( int i1=0, int i2=0 ) a1 = i1; a2 = i2; void print() cout a1= a1 t a2= a2 endl ; ;class B : public A public: int b1, b2 ; B( int j1=1, int j2=1 ) b1 = j1

35、; b2 = j2; void print()/定義同名函數(shù)定義同名函數(shù) cout b1= b1 t b2= b2 endl ; void printAB() A:print() ;/派生類對象調(diào)用基類版本同名成員函數(shù)派生類對象調(diào)用基類版本同名成員函數(shù) print() ;/派生類對象調(diào)用自身的成員函數(shù)派生類對象調(diào)用自身的成員函數(shù) ;int main() B b ; b.A:print();b.printAB(); 8.2.2 重名成員2.2.重名成員函數(shù)重名成員函數(shù)/定義同名函數(shù)定義同名函數(shù)#include/例例8-4using namespace std ;class A public: i

36、nt a1, a2 ; A( int i1=0, int i2=0 ) a1 = i1; a2 = i2; void print() cout a1= a1 t a2= a2 endl ; ;class B : public A public: int b1, b2 ; B( int j1=1, int j2=1 ) b1 = j1; b2 = j2; void print()/定義同名函數(shù)定義同名函數(shù) cout b1= b1 t b2= b2 endl ; void printAB() A:print() ;/派生類對象調(diào)用基類版本同名成員函數(shù)派生類對象調(diào)用基類版本同名成員函數(shù) /派生類對象

37、調(diào)用自身的成員函數(shù)派生類對象調(diào)用自身的成員函數(shù) ;int main() B b ; b.A:print();b.printAB(); 8.2.2 重名成員2.2.重名成員函數(shù)重名成員函數(shù)/定義同名函數(shù)定義同名函數(shù)派生類屏蔽基類同名成員函數(shù)派生類屏蔽基類同名成員函數(shù) 調(diào)用自身的成員函數(shù)調(diào)用自身的成員函數(shù)#include/例例8-4using namespace std ;class A public: int a1, a2 ; A( int i1=0, int i2=0 ) a1 = i1; a2 = i2; void print() cout a1= a1 t a2= a2 endl ; ;c

38、lass B : public A public: int b1, b2 ; B( int j1=1, int j2=1 ) b1 = j1; b2 = j2; void print()/定義同名函數(shù)定義同名函數(shù) cout b1= b1 t b2= b2 endl ; void printAB() /派生類對象調(diào)用基類版本同名成員函數(shù)派生類對象調(diào)用基類版本同名成員函數(shù) /派生類對象調(diào)用自身的成員函數(shù)派生類對象調(diào)用自身的成員函數(shù) ;int main() B b ; b.printAB(); 8.2.2 重名成員2.2.重名成員函數(shù)重名成員函數(shù)/定義同名函數(shù)定義同名函數(shù)派生類對象調(diào)用從基類派生類對

39、象調(diào)用從基類繼承的同名成員函數(shù)繼承的同名成員函數(shù)#include/例例8-4using namespace std ;class A public: int a1, a2 ; A( int i1=0, int i2=0 ) a1 = i1; a2 = i2; void print() cout a1= a1 t a2= a2 endl ; ;class B : public A public: int b1, b2 ; B( int j1=1, int j2=1 ) b1 = j1; b2 = j2; void print()/定義同名函數(shù)定義同名函數(shù) cout b1= b1 t b2= b2

40、 endl ; void printAB() /派生類對象調(diào)用基類版本同名成員函數(shù)派生類對象調(diào)用基類版本同名成員函數(shù) /派生類對象調(diào)用自身的成員函數(shù)派生類對象調(diào)用自身的成員函數(shù) ;int main() B b ; b.printAB(); 8.2.2 重名成員2.2.重名成員函數(shù)重名成員函數(shù)/定義同名函數(shù)定義同名函數(shù)基類基類this指針指針指向派生類對象指向派生類對象#include/例例8-4using namespace std ;class A public: int a1, a2 ; A( int i1=0, int i2=0 ) a1 = i1; a2 = i2; void prin

41、t() cout a1= a1 t a2= a2 endl ; ;class B : public A public: int b1, b2 ; B( int j1=1, int j2=1 ) b1 = j1; b2 = j2; void print()/定義同名函數(shù)定義同名函數(shù) cout b1= b1 t b2= b2 endl ; void printAB() A:print() ;/派生類對象調(diào)用基類版本同名成員函數(shù)派生類對象調(diào)用基類版本同名成員函數(shù) print() ;/派生類對象調(diào)用自身的成員函數(shù)派生類對象調(diào)用自身的成員函數(shù) ;int main() B b ; b.A:print();

42、b.printAB(); 8.2.2 重名成員2.2.重名成員函數(shù)重名成員函數(shù)8.2.3 派生類中訪問靜態(tài)成員 基類定義的靜態(tài)成員,將被所有派生類共享基類定義的靜態(tài)成員,將被所有派生類共享 根據(jù)靜態(tài)成員自身的訪問特性和派生類的繼承方式,在類層次根據(jù)靜態(tài)成員自身的訪問特性和派生類的繼承方式,在類層次 體系中具有不同的訪問性質體系中具有不同的訪問性質 派生類中訪問靜態(tài)成員,用以下形式顯式說明:派生類中訪問靜態(tài)成員,用以下形式顯式說明:類名類名 : : 成員成員 或通過對象訪問對象名對象名 . . 成員成員8.2.3 8.2.3 派生類中訪問靜態(tài)成員派生類中訪問靜態(tài)成員#includeusing n

43、amespace std ;class B public: static void Add() i+ ; static int i; void out() coutstatic i=iendl; ;int B:i=0;class D : private B public: void f() i=5; Add(); B:i+; B:Add(); ;/例例8-5 在派生類中訪問靜態(tài)成員在派生類中訪問靜態(tài)成員int main() B x; D y; x.Add(); x.out(); y.f(); coutstatic i=B:iendl; coutstatic i=x.iendl; /coutst

44、atic i=y.iendl;class Bclass D : private B#includeusing namespace std ;class B public: static void Add() i+ ; static int i; void out() coutstatic i=iendl; ;int B:i=0;class D : private B public: void f() i=5; Add(); B:i+; B:Add(); ;/例例8-5 在派生類中訪問靜態(tài)成員在派生類中訪問靜態(tài)成員int main() B x; D y; x.Add(); x.out(); y.

45、f(); coutstatic i=B:iendl; coutstatic i=x.iendl; /coutstatic i=y.iendl;static void Add() i+ ; 靜態(tài)成員函數(shù)靜態(tài)成員函數(shù)#includeusing namespace std ;class B public: static void Add() i+ ; static int i; void out() coutstatic i=iendl; ;int B:i=0;class D : private B public: void f() i=5; Add(); B:i+; B:Add(); ;/例例8-

46、5 在派生類中訪問靜態(tài)成員在派生類中訪問靜態(tài)成員int main() B x; D y; x.Add(); x.out(); y.f(); coutstatic i=B:iendl; coutstatic i=x.iendl; /coutstatic i=y.iendl;static int i;靜態(tài)數(shù)據(jù)成員靜態(tài)數(shù)據(jù)成員int B:i=0;#includeusing namespace std ;class B public: static void Add() i+ ; static int i; void out() coutstatic i=iendl; ;int B:i=0;class

47、 D : private B public: void f() i=5; Add(); B:i+; B:Add(); ;/例例8-5 在派生類中訪問靜態(tài)成員在派生類中訪問靜態(tài)成員int main() B x; D y; x.Add(); x.out(); y.f(); coutstatic i=B:iendl; coutstatic i=x.iendl; /coutstatic i=y.iendl;i 是類是類D的私有靜態(tài)數(shù)據(jù)成員的私有靜態(tài)數(shù)據(jù)成員類中可見類中可見#includeusing namespace std ;class B public: static void Add() i+

48、; static int i; void out() coutstatic i=iendl; ;int B:i=0;class D : private B public: void f() i=5; Add(); B:i+; B:Add(); ;/例例8-5 在派生類中訪問靜態(tài)成員在派生類中訪問靜態(tài)成員int main() B x; D y; x.Add(); x.out(); y.f(); coutstatic i=B:iendl; coutstatic i=x.iendl; /coutstatic i=y.iendl;Add()是類是類D的私有靜態(tài)成員函數(shù)的私有靜態(tài)成員函數(shù)類中可調(diào)用類中可

49、調(diào)用#includeusing namespace std ;class B public: static void Add() i+ ; static int i; void out() coutstatic i=iendl; ;int B:i=0;class D : private B public: void f() i=5; Add(); B:i+; B:Add(); ;/例例8-5 在派生類中訪問靜態(tài)成員在派生類中訪問靜態(tài)成員int main() B x; D y; x.Add(); x.out(); y.f(); coutstatic i=B:iendl; coutstatic i

50、=x.iendl; /coutstatic i=y.iendl;訪問訪問B類的靜態(tài)成員類的靜態(tài)成員#includeusing namespace std ;class B public: static void Add() i+ ; static int i; void out() coutstatic i=iendl; ;int B:i=0;class D : private B public: void f() i=5; Add(); B:i+; B:Add(); ;/例例8-5 在派生類中訪問靜態(tài)成員在派生類中訪問靜態(tài)成員int main() B x; D y; x.Add(); x.o

51、ut(); y.f(); coutstatic i=B:iendl; coutstatic i=x.iendl; /coutstatic i=y.iendl;訪問訪問B類的靜態(tài)數(shù)據(jù)成員類的靜態(tài)數(shù)據(jù)成員#includeusing namespace std ;class B public: static void Add() i+ ; static int i; void out() coutstatic i=iendl; ;int B:i=0;class D : private B public: void f() i=5; Add(); B:i+; B:Add(); ;/例例8-5 在派生類

52、中訪問靜態(tài)成員在派生類中訪問靜態(tài)成員int main() B x; D y; x.Add(); x.out(); y.f(); coutstatic i=B:iendl; coutstatic i=x.iendl; /coutstatic i=y.iendl;通過通過B類對象訪問類對象訪問靜態(tài)數(shù)據(jù)成員靜態(tài)數(shù)據(jù)成員#includeusing namespace std ;class B public: static void Add() i+ ; static int i; void out() coutstatic i=iendl; ;int B:i=0;class D : private B

53、 public: void f() i=5; Add(); B:i+; B:Add(); ;/例例8-5 在派生類中訪問靜態(tài)成員在派生類中訪問靜態(tài)成員int main() B x; D y; x.Add(); x.out(); y.f(); coutstatic i=B:iendl; coutstatic i=x.iendl; /coutstatic i=y.iendl;#includeusing namespace std ;class B public: static void Add() i+ ; static int i; void out() coutstatic i=iendl;

54、;int B:i=0;class D : private B public: void f() i=5; Add(); B:i+; B:Add(); ;/例例8-5 在派生類中訪問靜態(tài)成員在派生類中訪問靜態(tài)成員int main() B x; D y; x.Add(); x.out(); y.f(); coutstatic i=B:iendl; coutstatic i=x.iendl; /coutstatic i=y.iendl;#includeusing namespace std ;class B public: static void Add() i+ ; static int i; v

55、oid out() coutstatic i=iendl; ;int B:i=0;class D : private B public: void f(); i=5; Add(); B:i+; B:Add(); ;/例例8-5 在派生類中訪問靜態(tài)成員在派生類中訪問靜態(tài)成員int main() B x; D y; x.Add(); x.out(); y.f(); coutstatic i=B:iendl; coutstatic i=x.iendl; /coutstatic i=y.iendl;#includeusing namespace std ;class B public: static

56、void Add() i+ ; static int i; void out() coutstatic i=iendl; ;int B:i=0;class D : private B public: void f(); i=5; Add(); B:i+; B:Add(); ;/例例8-5 在派生類中訪問靜態(tài)成員在派生類中訪問靜態(tài)成員int main() B x; D y; x.Add(); x.out(); y.f(); coutstatic i=B:iendl; coutstatic i=x.iendl; /coutstatic i=y.iendl; 建立一個類層次后,通常創(chuàng)建某個派生類的對

57、象,包括使用基建立一個類層次后,通常創(chuàng)建某個派生類的對象,包括使用基類的數(shù)據(jù)和函數(shù)類的數(shù)據(jù)和函數(shù) C+提供一種機制,在創(chuàng)建派生類對象時用指定參數(shù)調(diào)用基類提供一種機制,在創(chuàng)建派生類對象時用指定參數(shù)調(diào)用基類的構造函數(shù)來初始化派生類繼承基類的數(shù)據(jù)的構造函數(shù)來初始化派生類繼承基類的數(shù)據(jù) 派生類構造函數(shù)聲明為派生類構造函數(shù)聲明為派生類構造函數(shù)派生類構造函數(shù) ( 變元表變元表 ) : 基類基類 ( 變元表變元表 ) , 對象成員對象成員1( 變元表變元表 ) 對象成員對象成員n ( 變元表變元表 ) ; 構造函數(shù)執(zhí)行順序:基類構造函數(shù)執(zhí)行順序:基類 對象成員對象成員 派生類派生類/ 例例8-6 調(diào)用構造函

58、數(shù)順序測試,構造函數(shù)無參數(shù)調(diào)用構造函數(shù)順序測試,構造函數(shù)無參數(shù)#includeusing namespace std ;class Base public : Base ( ) cout Base created.n ; ;class D_class : public Base public : D_class ( ) cout D_class created.n ; ;int main ( ) D_class d1 ; 8.3 基類的初始化/ 例例8-6 調(diào)用構造函數(shù)順序測試,構造函數(shù)無參數(shù)調(diào)用構造函數(shù)順序測試,構造函數(shù)無參數(shù)#includeusing namespace std ;clas

59、s Base public : Base ( ) cout Base created.n ; ;class D_class : public Base public : D_class ( ) cout D_class created.n ; ;int main ( ) D_class d1 ; 8.3 基類的初始化/ 例例8-6 調(diào)用構造函數(shù)順序測試,構造函數(shù)無參數(shù)調(diào)用構造函數(shù)順序測試,構造函數(shù)無參數(shù)#includeusing namespace std ;class Base public : Base ( ) cout Base created.n ; ;class D_class :

60、public Base public : D_class ( ) cout D_class created.n ; ;int main ( ) D_class d1 ; 8.3 基類的初始化 調(diào)用基類構造函數(shù)調(diào)用基類構造函數(shù)/ 例例8-6 調(diào)用構造函數(shù)順序測試,構造函數(shù)無參數(shù)調(diào)用構造函數(shù)順序測試,構造函數(shù)無參數(shù)#includeusing namespace std ;class Base public : Base ( ) cout Base created.n ; ;class D_class : public Base public : D_class ( ) cout D_class c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論