[高等教育]面向?qū)ο髲?fù)習(xí)2012信工ppt課件_第1頁
[高等教育]面向?qū)ο髲?fù)習(xí)2012信工ppt課件_第2頁
[高等教育]面向?qū)ο髲?fù)習(xí)2012信工ppt課件_第3頁
[高等教育]面向?qū)ο髲?fù)習(xí)2012信工ppt課件_第4頁
[高等教育]面向?qū)ο髲?fù)習(xí)2012信工ppt課件_第5頁
已閱讀5頁,還剩54頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 面向?qū)ο蟮母攀雒嫦驅(qū)ο蟮母攀?類及其對象的封裝性類及其對象的封裝性 友員、重載和援用友員、重載和援用 承繼與派生承繼與派生 虛函數(shù)與多態(tài)性虛函數(shù)與多態(tài)性 模板模板 復(fù)習(xí)重點(diǎn)復(fù)習(xí)重點(diǎn)面向?qū)ο蟮脑O(shè)計方法面向?qū)ο蟮脑O(shè)計方法1 面向?qū)ο蟮乃枷朊嫦驅(qū)ο蟮乃枷? 面向?qū)ο蟮母靖拍蠲嫦驅(qū)ο蟮母靖拍? 面向?qū)ο蟮母咎匦悦嫦驅(qū)ο蟮母咎匦? C+的初步知識的初步知識本章要求本章要求l熟習(xí)面向?qū)ο蟮乃枷?;熟?xí)面向?qū)ο蟮乃枷耄籰了解面向?qū)ο蟮母靖拍睿毫私饷嫦驅(qū)ο蟮母靖拍睿?對象、類;對象、類;l掌握面向?qū)ο蟮母咎匦裕悍庋b性的特點(diǎn),掌握面向?qū)ο蟮母咎匦裕悍庋b性的特點(diǎn),承繼性的優(yōu)點(diǎn)和多態(tài)性的含義;承繼性

2、的優(yōu)點(diǎn)和多態(tài)性的含義;l掌握掌握C+比比C加強(qiáng)的知識:函數(shù)原型與變量加強(qiáng)的知識:函數(shù)原型與變量闡明、輸入輸出、闡明、輸入輸出、const闡明符和闡明符和void類型。類型。面向?qū)ο蟮母靖拍蠲嫦驅(qū)ο蟮母靖拍頻 對象l 類面向?qū)ο蟮母咎匦悦嫦驅(qū)ο蟮母咎匦詌封裝性封裝性l承繼性承繼性l多態(tài)性多態(tài)性l函數(shù)原形闡明函數(shù)原形闡明l變量的闡明變量的闡明l輸入輸出輸入輸出lconst闡明符闡明符lvoid類型類型從從C到到C+ const闡明符l 定義常量時,定義常量時,C言語用言語用#define,而,而C+用用const闡明符,闡明符,const在在C+中的作用:中的作用:1. 替代替代#defi

3、ne宏定義常量宏定義常量 例:例:#define MAX 100 可替代為:可替代為: const int MAX=100; 或或 int const MAX=100; 2. 定義常量數(shù)組定義常量數(shù)組 const float data =1.2,2.5,3.6,4.8,5.5; const闡明符3. const闡明符與函數(shù)參數(shù)相銜接闡明符與函數(shù)參數(shù)相銜接例:例:void print_value(const int value) coutvalue; 試圖在該函數(shù)體中改動試圖在該函數(shù)體中改動const參量參量value的是非法的。的是非法的。 const闡明符4. 定義指針常量,根據(jù)定義指針常量

4、,根據(jù)const位置的位置的不同含義也不同,有三種方式:不同含義也不同,有三種方式:(1) 指向常量的指針:闡明一個指針變量指向的數(shù)指向常量的指針:闡明一個指針變量指向的數(shù)據(jù)是常量。據(jù)是常量。name是指向字符串常量的指針,是指向字符串常量的指針,name指向的字符串不能更改,但指向的字符串不能更改,但name可以更新可以更新 const char *name=“Richard; name=“Martin; 對對 name0=C; 錯錯 const闡明符(2) 常指針常指針: 把指針本身聲明為一個常量,而不是將把指針本身聲明為一個常量,而不是將它指向的對象聲明為常量。它指向的對象聲明為常量。n

5、ame不能更改,不能更改,name指向的內(nèi)容可更新指向的內(nèi)容可更新 char *const name=“Richard; name=“Martin; 錯錯 name0=C; 對對(3) 指向常量的常指針指向常量的常指針: 這個指針本身不能改動,它指這個指針本身不能改動,它指向的值也不能改動。向的值也不能改動。name不能更改,不能更改,name指向指向的內(nèi)容也不能更新的內(nèi)容也不能更新 const char *const name=“Richard; name=“Martin; 錯錯 name0=C; 錯錯C+C+類及其對象的封裝性類及其對象的封裝性1 類的聲明和對象定義類的聲明和對象定義2 類

6、的成員函數(shù)類的成員函數(shù)3 對象成員的援用對象成員的援用4 構(gòu)造函數(shù)和析構(gòu)函數(shù)構(gòu)造函數(shù)和析構(gòu)函數(shù)5 對象指針對象指針6 動態(tài)存儲動態(tài)存儲l掌握類的定義和運(yùn)用方法。類的聲明包括掌握類的定義和運(yùn)用方法。類的聲明包括數(shù)據(jù)數(shù)據(jù)(數(shù)據(jù)成員數(shù)據(jù)成員)和函數(shù)和函數(shù)(成員函數(shù)成員函數(shù));私有;私有成員和公有成員;成員和公有成員;l掌握對象的定義和運(yùn)用方法;掌握對象的定義和運(yùn)用方法;l掌握對象的存儲空間及成員函數(shù)的存儲方掌握對象的存儲空間及成員函數(shù)的存儲方式,對象的存儲空間只計算數(shù)據(jù)成員的存式,對象的存儲空間只計算數(shù)據(jù)成員的存儲空間;儲空間;l構(gòu)造函數(shù)對對象初始化;構(gòu)造函數(shù)與類同構(gòu)造函數(shù)對對象初始化;構(gòu)造函數(shù)與類

7、同名,可以接受參數(shù),允許重載。構(gòu)造函數(shù)名,可以接受參數(shù),允許重載。構(gòu)造函數(shù)不能顯式調(diào)用;不能顯式調(diào)用;本章要求本章要求l析構(gòu)函數(shù)執(zhí)行與構(gòu)造函數(shù)相反的操作,完析構(gòu)函數(shù)執(zhí)行與構(gòu)造函數(shù)相反的操作,完成某些清理內(nèi)存的義務(wù),例如釋放對象占成某些清理內(nèi)存的義務(wù),例如釋放對象占用的內(nèi)存空間;用的內(nèi)存空間;lnew懇求存儲空間,懇求存儲空間,delete釋放用釋放用new懇懇求的存儲空間,配對運(yùn)用。求的存儲空間,配對運(yùn)用。l動態(tài)創(chuàng)建對象動態(tài)創(chuàng)建對象本章要求本章要求 缺省參數(shù)的構(gòu)造函數(shù)缺省參數(shù)的構(gòu)造函數(shù)l部分參數(shù)缺省時,規(guī)那么是:部分參數(shù)缺省時,規(guī)那么是:l 一切取缺省值的參數(shù)必需出如今不取一切取缺省值的參數(shù)必

8、需出如今不取缺省值的參數(shù)的右邊。即一切的缺省參缺省值的參數(shù)的右邊。即一切的缺省參數(shù)是參數(shù)表中最后的參數(shù)。數(shù)是參數(shù)表中最后的參數(shù)。point(int x, int y=0);point(int x, int y=0);對對point (int x=0, int y); point (int x=0, int y); 錯錯void f1(int i, int j, int k=10);void f1(int i, int j, int k=10);對對void f2(char void f2(char * *str, int x=-1, int y=-1); str, int x=-1, int

9、y=-1); 對對void f3(int i, int j=10, int k);void f3(int i, int j=10, int k);錯錯 多構(gòu)造函數(shù)l在一個類中有幾個構(gòu)造函數(shù),適宜不同在一個類中有幾個構(gòu)造函數(shù),適宜不同的場所,用它們所帶參數(shù)的個數(shù)或類型的場所,用它們所帶參數(shù)的個數(shù)或類型的不同而區(qū)分。的不同而區(qū)分。l定義多構(gòu)造函數(shù)時,參數(shù)的個數(shù)或類型定義多構(gòu)造函數(shù)時,參數(shù)的個數(shù)或類型上必需存在差別,否那么會有二義性。上必需存在差別,否那么會有二義性。l在定義多個構(gòu)造函數(shù),又運(yùn)用缺省參數(shù)在定義多個構(gòu)造函數(shù),又運(yùn)用缺省參數(shù)時,特別要留意防止出現(xiàn)二義性。時,特別要留意防止出現(xiàn)二義性。 運(yùn)

10、用缺省參數(shù)的構(gòu)造函數(shù)留意:l在構(gòu)造函數(shù)中運(yùn)用缺省參數(shù)提供了建立對象的在構(gòu)造函數(shù)中運(yùn)用缺省參數(shù)提供了建立對象的多種初始化方法,相當(dāng)于多個重載的構(gòu)造函數(shù);多種初始化方法,相當(dāng)于多個重載的構(gòu)造函數(shù);l應(yīng)該在聲明構(gòu)造函數(shù)時指定參數(shù)的缺省值,而應(yīng)該在聲明構(gòu)造函數(shù)時指定參數(shù)的缺省值,而不能只在定義構(gòu)造函數(shù)時指定缺省值;不能只在定義構(gòu)造函數(shù)時指定缺省值;l假設(shè)構(gòu)造函數(shù)的全部參數(shù)都指定了缺省值,那假設(shè)構(gòu)造函數(shù)的全部參數(shù)都指定了缺省值,那么在定義對象時可以不給出,或給出一個、幾么在定義對象時可以不給出,或給出一個、幾個實(shí)參;個實(shí)參;l在一個類中定義了全部缺省參數(shù)的構(gòu)造函數(shù)后,在一個類中定義了全部缺省參數(shù)的構(gòu)造函

11、數(shù)后,不能再定義重載構(gòu)造函數(shù),否那么會出現(xiàn)二義不能再定義重載構(gòu)造函數(shù),否那么會出現(xiàn)二義性。性。Box(int =10,int =10,int =10); /指定全部參數(shù)為缺省參數(shù)指定全部參數(shù)為缺省參數(shù)Box( ); /聲明無參構(gòu)造函數(shù),是重載構(gòu)造函數(shù)聲明無參構(gòu)造函數(shù),是重載構(gòu)造函數(shù)Box(int,int); /聲明有聲明有2個參數(shù)的構(gòu)造函數(shù)個參數(shù)的構(gòu)造函數(shù)假設(shè)有以下語句:假設(shè)有以下語句:Box box1; /無法確定調(diào)用第無法確定調(diào)用第1個、還是第個、還是第2個構(gòu)造函數(shù)?個構(gòu)造函數(shù)?Box box2(15,30); /無法確定調(diào)用第無法確定調(diào)用第1個、還是第個、還是第3個構(gòu)造函數(shù)?個構(gòu)造函數(shù)?

12、 動態(tài)存儲動態(tài)存儲lC+C+運(yùn)用運(yùn)用newnew來動態(tài)分配存儲空間,運(yùn)用來動態(tài)分配存儲空間,運(yùn)用deletedelete來動態(tài)釋放存儲空間。來動態(tài)釋放存儲空間。l優(yōu)點(diǎn):優(yōu)點(diǎn):lnewnew自動計算要分配的類型的大小,自動計算要分配的類型的大小,l自動前往正確的指針類型,不用對前往自動前往正確的指針類型,不用對前往指針進(jìn)展類型轉(zhuǎn)換指針進(jìn)展類型轉(zhuǎn)換l可以用可以用newnew將分配的對象初始化。將分配的對象初始化。 new new的語法格式的語法格式l名字指針名字指針=new =new 名字名字初始化值名字名字初始化值lint int * *s;s;ls=new int(200);s=new int

13、(200);l假設(shè)用假設(shè)用newnew分配的類型為數(shù)組,需求在類型名分配的類型為數(shù)組,需求在類型名后綴上數(shù)組的大小,后綴上數(shù)組的大小,l如如 : int : int * *p=new int10; p=new int10; l假設(shè)創(chuàng)建多維數(shù)組,必需提供一切維的大小假設(shè)創(chuàng)建多維數(shù)組,必需提供一切維的大小l如:如: int int * *q=a234;q=a234; delete的語法格式ldelete delete 名字指針名字指針l名字指針是指將要被釋放的那一塊存儲名字指針是指將要被釋放的那一塊存儲空間的起始地址,此存儲空間一定是用空間的起始地址,此存儲空間一定是用newnew分配的。分配的。

14、l假設(shè)所釋放的是整個數(shù)組占用的空間,假設(shè)所釋放的是整個數(shù)組占用的空間,可寫成可寫成delete p;delete p;釋放時不需給出數(shù)組釋放時不需給出數(shù)組的大小。的大小。 析構(gòu)函數(shù)析構(gòu)函數(shù) l析構(gòu)函數(shù)普通用于收回對象中成員所占析構(gòu)函數(shù)普通用于收回對象中成員所占的存儲空間。的存儲空間。l析構(gòu)函數(shù)名字與類名一樣,只是在前面析構(gòu)函數(shù)名字與類名一樣,只是在前面加了一個符號加了一個符號“ 。它不接受任何參數(shù),。它不接受任何參數(shù),也不前往任何闡明的類型和值。也不前往任何闡明的類型和值。l普通析構(gòu)函數(shù)由一系列的普通析構(gòu)函數(shù)由一系列的delete delete 組成。組成。友元、重載和援用友元、重載和援用l友

15、元友元friend:即類的朋友,不:即類的朋友,不同類的成員函數(shù)之間、類的成員函同類的成員函數(shù)之間、類的成員函數(shù)與普通函數(shù)進(jìn)展數(shù)據(jù)共享的機(jī)制;數(shù)與普通函數(shù)進(jìn)展數(shù)據(jù)共享的機(jī)制;l重載重載overloading:同一:同一“符號符號在同一作用域的不同場所具有不在同一作用域的不同場所具有不同的語義實(shí)現(xiàn)算法;同的語義實(shí)現(xiàn)算法;l援用援用reference:即對象的別名。:即對象的別名。 本章要求l友元:突破了類的數(shù)據(jù)封裝機(jī)制,允許類以外的友元:突破了類的數(shù)據(jù)封裝機(jī)制,允許類以外的函數(shù)可以訪問類對象的私有數(shù)據(jù),友元分為友員函數(shù)可以訪問類對象的私有數(shù)據(jù),友元分為友員函數(shù)、友元成員和友元類。運(yùn)用時留意友元的

16、聲函數(shù)、友元成員和友元類。運(yùn)用時留意友元的聲明和定義;明和定義;l重載:是重載:是C+的多態(tài)性,同一標(biāo)識符在不同的場的多態(tài)性,同一標(biāo)識符在不同的場所具有不同的語義。函數(shù)重載有構(gòu)造函數(shù)重載、所具有不同的語義。函數(shù)重載有構(gòu)造函數(shù)重載、成員函數(shù)和非成員函數(shù)重載;運(yùn)算符重載有種方成員函數(shù)和非成員函數(shù)重載;運(yùn)算符重載有種方式:重載為類的成員函數(shù)和重載為類的友元函數(shù)。式:重載為類的成員函數(shù)和重載為類的友元函數(shù)。l援用:即對象的別名,在創(chuàng)建援用時初始化,且援用:即對象的別名,在創(chuàng)建援用時初始化,且不能再賦值。對援用的操作就是對目的的操作,不能再賦值。對援用的操作就是對目的的操作,用援用傳送參數(shù)可改動實(shí)參的值

17、,用援用傳送對用援用傳送參數(shù)可改動實(shí)參的值,用援用傳送對象對象可節(jié)省內(nèi)存,援用函數(shù)可被賦值。象對象可節(jié)省內(nèi)存,援用函數(shù)可被賦值。 友元的闡明和定義l將外界的某個對象闡明為某一個類的友將外界的某個對象闡明為某一個類的友員,這個外界對象就可以訪問這個類對員,這個外界對象就可以訪問這個類對象中的私有成員。象中的私有成員。l聲明為友員的外界對象既可以是另一個聲明為友員的外界對象既可以是另一個類的成員函數(shù),也可以是不屬于任何類類的成員函數(shù),也可以是不屬于任何類的普通的函數(shù),還可以是整個的一個類的普通的函數(shù),還可以是整個的一個類l友員聲明包含在其私有成員可被訪問的友員聲明包含在其私有成員可被訪問的類的定義

18、中。此聲明可放在公有部分,類的定義中。此聲明可放在公有部分,也可放在私有部分。也可放在私有部分。 友元函數(shù)l在一個類中闡明的某個函數(shù)不是該類的在一個類中闡明的某個函數(shù)不是該類的成員函數(shù),而是獨(dú)立于任何類的普通的成員函數(shù),而是獨(dú)立于任何類的普通的外界函數(shù),它可以訪問該類中一切對象外界函數(shù),它可以訪問該類中一切對象的私有成員。的私有成員。l定義時,在函數(shù)名前加上關(guān)鍵詞定義時,在函數(shù)名前加上關(guān)鍵詞friendfriend 友元類友元類l友元可以是一個類。友元可以是一個類。l作為友元的類中的一切成員函數(shù)都可以作為友元的類中的一切成員函數(shù)都可以訪問另一個類中的私有成員。訪問另一個類中的私有成員。 函數(shù)重

19、載l兩個以上的函數(shù),只需運(yùn)用不同類型的兩個以上的函數(shù),只需運(yùn)用不同類型的參數(shù)或參數(shù)個數(shù)不同,編譯器便知道在參數(shù)或參數(shù)個數(shù)不同,編譯器便知道在什么情況下該調(diào)用哪一個函數(shù),這就叫什么情況下該調(diào)用哪一個函數(shù),這就叫函數(shù)重載。函數(shù)重載。l構(gòu)造函數(shù)重載構(gòu)造函數(shù)重載l類成員函數(shù)重載類成員函數(shù)重載l類以外的普通函數(shù)重載類以外的普通函數(shù)重載 運(yùn)算符重載l用成員函數(shù)重載運(yùn)算符用成員函數(shù)重載運(yùn)算符l用友元重載運(yùn)算符用友元重載運(yùn)算符l運(yùn)算符運(yùn)算符 和的重載和的重載l賦值運(yùn)算符的重載賦值運(yùn)算符的重載 援用l援用的概念援用的概念l援用參數(shù)援用參數(shù)l援用前往值援用前往值 援用的概念l援用就是給對象取一個別名,它主要用援用

20、就是給對象取一個別名,它主要用在給函數(shù)傳送大型的對象,從函數(shù)中前在給函數(shù)傳送大型的對象,從函數(shù)中前往左值,也可以獨(dú)立援用。往左值,也可以獨(dú)立援用。l援用定義的關(guān)鍵詞是援用定義的關(guān)鍵詞是type&type&l int i; int i;l int &j=i; int &j=i;l創(chuàng)建了一個整型援用創(chuàng)建了一個整型援用j j,j j是是i i的地址的地址的別名,的別名,j j是是i i的同義詞,它們表示同一的同義詞,它們表示同一個對象。個對象。 在定義援用時,馬上就要對它進(jìn)展初始化,在定義援用時,馬上就要對它進(jìn)展初始化,不可定義完后再賦值。不可定義完后再賦值。 對對象

21、或?qū)υ玫娜魏尾僮鞫紩绊懙剿鼘ο蠡驅(qū)υ玫娜魏尾僮鞫紩绊懙剿鼈児餐膶ο?。們共同的對象?援用一旦被初始化,就不能再重新賦值。援用一旦被初始化,就不能再重新賦值。 需求留意的問題承繼與派生承繼與派生1 承繼與派生的概念承繼與派生的概念2 派生類的聲明方式派生類的聲明方式3 派生類的構(gòu)成派生類的構(gòu)成4 派生類成員函數(shù)的訪問屬性派生類成員函數(shù)的訪問屬性5 派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)6 多承繼多承繼7 虛基類虛基類l了解承繼與派生的概念,掌握單承繼和多承了解承繼與派生的概念,掌握單承繼和多承繼的定義方式;繼的定義方式;l掌握承繼的幾種方式:掌握承繼的幾種方式:publ

22、ic承繼、承繼、private承繼和承繼和protected承繼,以及在不同承繼方式承繼,以及在不同承繼方式下基類成員在派生類中的訪問屬性的差別;下基類成員在派生類中的訪問屬性的差別;l熟習(xí)派生類構(gòu)造函數(shù)的定義和執(zhí)行順序;熟習(xí)派生類構(gòu)造函數(shù)的定義和執(zhí)行順序;l掌握多承繼的概念和定義,多承繼構(gòu)造函數(shù)掌握多承繼的概念和定義,多承繼構(gòu)造函數(shù)的定義與執(zhí)行順序,留意多承繼的二義性;的定義與執(zhí)行順序,留意多承繼的二義性;l掌握虛基類的定義和初始化。掌握虛基類的定義和初始化。本章要求本章要求派生類對基類成員的訪問權(quán)派生類對基類成員的訪問權(quán)l(xiāng)基類的私有成員派生類及派生類的運(yùn)用基類的私有成員派生類及派生類的運(yùn)用

23、者都無權(quán)訪問。者都無權(quán)訪問。l對于基類的公有成員的訪問權(quán),在定義對于基類的公有成員的訪問權(quán),在定義派生類時,定義的方式不同,權(quán)限也不派生類時,定義的方式不同,權(quán)限也不同。同。 私有派生私有派生l由私有派生得到的派生類,對它的基類由私有派生得到的派生類,對它的基類的公有成員只能是私有承繼,基類的一的公有成員只能是私有承繼,基類的一切公有成員都只能成為私有派生類的私切公有成員都只能成為私有派生類的私有成員,這些私有成員只能被派生類的有成員,這些私有成員只能被派生類的成員函數(shù)訪問,而派生類的運(yùn)用者無權(quán)成員函數(shù)訪問,而派生類的運(yùn)用者無權(quán)訪問。訪問。 公有派生公有派生l基類中一切的公有成員在派生類中也都

24、基類中一切的公有成員在派生類中也都是公有的。是公有的。l公有派生在定義派生類時,在基類標(biāo)識公有派生在定義派生類時,在基類標(biāo)識符前加一個符前加一個publicpublic關(guān)鍵詞。關(guān)鍵詞。 維護(hù)派生l基類的基類的protectedprotected成員只能被其派生類的成員只能被其派生類的成員訪問,不能被派生類的外部對象訪成員訪問,不能被派生類的外部對象訪問。問。 派生類的構(gòu)造函數(shù)l在兩種情況下,必需定義派生類的構(gòu)造函在兩種情況下,必需定義派生類的構(gòu)造函數(shù)數(shù)l 派生類本身需求構(gòu)造函數(shù)派生類本身需求構(gòu)造函數(shù)l 在定義派生類對象時,其相應(yīng)的基類對在定義派生類對象時,其相應(yīng)的基類對象需調(diào)用帶有參數(shù)的構(gòu)造函

25、數(shù)。象需調(diào)用帶有參數(shù)的構(gòu)造函數(shù)。在定義對象時構(gòu)造函數(shù)的執(zhí)行順序是:先祖在定義對象時構(gòu)造函數(shù)的執(zhí)行順序是:先祖先基類,再客人對象成員,后本人先基類,再客人對象成員,后本人派生類本身派生類本身在定義對象時構(gòu)造函數(shù)的執(zhí)行順序是:在定義對象時構(gòu)造函數(shù)的執(zhí)行順序是:先祖先基類,再客人對象成員,先祖先基類,再客人對象成員,后本人派生類本身后本人派生類本身 派生類的析構(gòu)函數(shù)l在派生類中能否要定義析構(gòu)函數(shù)與它所屬的在派生類中能否要定義析構(gòu)函數(shù)與它所屬的基類無關(guān)?;悷o關(guān)。l假設(shè)派生類在退出定義域前有數(shù)據(jù)需做善后假設(shè)派生類在退出定義域前有數(shù)據(jù)需做善后任務(wù),就需定義析構(gòu)函數(shù)?;惖奈鰳?gòu)函數(shù)任務(wù),就需定義析構(gòu)函數(shù)。

26、基類的析構(gòu)函數(shù)不會由于派生類沒有析構(gòu)函數(shù)而得不到執(zhí)行。不會由于派生類沒有析構(gòu)函數(shù)而得不到執(zhí)行。l派生類的析構(gòu)函數(shù)的執(zhí)行順序正好與構(gòu)造函派生類的析構(gòu)函數(shù)的執(zhí)行順序正好與構(gòu)造函數(shù)的執(zhí)行順序相反:先本人派生類本身,數(shù)的執(zhí)行順序相反:先本人派生類本身,再客人對象成員,后祖先基類再客人對象成員,后祖先基類多承繼構(gòu)造函數(shù)的定義多承繼構(gòu)造函數(shù)的定義l多承繼的構(gòu)造函數(shù)的定義與單承繼的類多承繼的構(gòu)造函數(shù)的定義與單承繼的類似,只是幾個基類的構(gòu)造函數(shù)之間用似,只是幾個基類的構(gòu)造函數(shù)之間用“,分隔。分隔。l 派生類名:派生類名參數(shù)表:派生類名:派生類名參數(shù)表:基類基類1 1參數(shù)表參數(shù)表1 1,基類基類n n參數(shù)表參數(shù)

27、表n n,對象成員,對象成員1 1參數(shù)表參數(shù)表1 1,對象成對象成員員1 1參數(shù)表參數(shù)表1 1l l/l 多承繼構(gòu)造函數(shù)的執(zhí)行順序多承繼構(gòu)造函數(shù)的執(zhí)行順序先祖先基類,再客人成員對象,先祖先基類,再客人成員對象,后本人派生類,在多個基類之間嚴(yán)厲后本人派生類,在多個基類之間嚴(yán)厲按照派生定義時從左到右的順序來陳列先按照派生定義時從左到右的順序來陳列先后。后。多承繼的析構(gòu)函數(shù)的調(diào)用順序多承繼的析構(gòu)函數(shù)的調(diào)用順序與構(gòu)造函數(shù)的調(diào)用順序正好相反。與構(gòu)造函數(shù)的調(diào)用順序正好相反。 虛基類l虛基類的概念虛基類的概念l虛基類的初始化虛基類的初始化 虛基類的概念l當(dāng)在多條承繼途徑上有一個公共的基類,當(dāng)在多條承繼途徑上

28、有一個公共的基類,在這些途徑的集合處,這個公共的基類在這些途徑的集合處,這個公共的基類就會產(chǎn)生多個實(shí)例或多個副本,假就會產(chǎn)生多個實(shí)例或多個副本,假設(shè)只想保管這個基類的一個實(shí)例,可以設(shè)只想保管這個基類的一個實(shí)例,可以將這個公共基類闡明為虛基類。將這個公共基類闡明為虛基類。l定義方法:在定義派生類時,在需定義定義方法:在定義派生類時,在需定義為虛基類的基類描畫前加上為虛基類的基類描畫前加上virtualvirtual關(guān)鍵關(guān)鍵詞。詞。 虛基類的初始化l虛基類的初始化與普通構(gòu)造函數(shù)的初始化在虛基類的初始化與普通構(gòu)造函數(shù)的初始化在語法上是一樣的,但構(gòu)造函數(shù)的調(diào)用次序不語法上是一樣的,但構(gòu)造函數(shù)的調(diào)用次序

29、不同。同。l派生類構(gòu)造函數(shù)的調(diào)用次序,原那么有三:派生類構(gòu)造函數(shù)的調(diào)用次序,原那么有三:l 1. 1.虛基類的構(gòu)造函數(shù)在非虛基類之前調(diào)用虛基類的構(gòu)造函數(shù)在非虛基類之前調(diào)用l 2. 2.假設(shè)同一層次中包含多個虛基類,這些假設(shè)同一層次中包含多個虛基類,這些虛基虛基 l 類的構(gòu)造函數(shù)按它們闡明的次序調(diào)用類的構(gòu)造函數(shù)按它們闡明的次序調(diào)用l 3. 3.假設(shè)虛基類由非虛基類派生而來,那么假設(shè)虛基類由非虛基類派生而來,那么依然先調(diào)用基類的構(gòu)造函數(shù),再調(diào)用派生類依然先調(diào)用基類的構(gòu)造函數(shù),再調(diào)用派生類的構(gòu)造函數(shù)。的構(gòu)造函數(shù)。1 多態(tài)性多態(tài)性2 虛函數(shù)虛函數(shù)3 純虛函數(shù)與籠統(tǒng)類純虛函數(shù)與籠統(tǒng)類多態(tài)性與虛函數(shù)多態(tài)性

30、與虛函數(shù)l多態(tài)性的實(shí)現(xiàn)有兩種:早期聯(lián)編經(jīng)過重載實(shí)現(xiàn);多態(tài)性的實(shí)現(xiàn)有兩種:早期聯(lián)編經(jīng)過重載實(shí)現(xiàn);滯后聯(lián)編經(jīng)過虛函數(shù)實(shí)現(xiàn);滯后聯(lián)編經(jīng)過虛函數(shù)實(shí)現(xiàn);l對象指針:指向基類類型的指針可以指向其公有對象指針:指向基類類型的指針可以指向其公有派生類對象,但只能訪問從基類承繼的成員;派生類對象,但只能訪問從基類承繼的成員;l虛函數(shù):用于實(shí)現(xiàn)滯后聯(lián)編,在基類中將成員函虛函數(shù):用于實(shí)現(xiàn)滯后聯(lián)編,在基類中將成員函數(shù)聲明為數(shù)聲明為virtual特性,就可以在派生類中對該成特性,就可以在派生類中對該成員函數(shù)重新定義定義原型與基類中的完全一員函數(shù)重新定義定義原型與基類中的完全一樣,是特殊的函數(shù)重載。當(dāng)基類指針指向派生樣,

31、是特殊的函數(shù)重載。當(dāng)基類指針指向派生類時,即可訪問派生類重新定義的函數(shù);類時,即可訪問派生類重新定義的函數(shù);l籠統(tǒng)類:是指包含純虛函數(shù)的類,純虛函數(shù)提供籠統(tǒng)類:是指包含純虛函數(shù)的類,純虛函數(shù)提供了籠統(tǒng)類對派生類的接口。純虛函數(shù)是僅在基類了籠統(tǒng)類對派生類的接口。純虛函數(shù)是僅在基類中聲明,但必需在派生類中定義不同的實(shí)現(xiàn)版本。中聲明,但必需在派生類中定義不同的實(shí)現(xiàn)版本。本章要求本章要求 多態(tài)性l多態(tài)性指不同對象收到一樣的音訊時產(chǎn)多態(tài)性指不同對象收到一樣的音訊時產(chǎn)生不同的動作。生不同的動作。C+C+支持兩種多態(tài)性,一支持兩種多態(tài)性,一種是編譯時的多態(tài)性,另一種是運(yùn)轉(zhuǎn)時種是編譯時的多態(tài)性,另一種是運(yùn)轉(zhuǎn)時

32、的多態(tài)性。的多態(tài)性。l編譯時的多態(tài)性編譯時的多態(tài)性l運(yùn)轉(zhuǎn)時的多態(tài)性運(yùn)轉(zhuǎn)時的多態(tài)性 引入派生類后的對象指針l引入派生概念后,任何被闡明為指向基類對象引入派生概念后,任何被闡明為指向基類對象的指針都可以指向它的公有派生類的指針都可以指向它的公有派生類l可以讓指向基類對象的指針指向它的公有派生可以讓指向基類對象的指針指向它的公有派生的對象,假設(shè)指向私有派生的對象那么被制止的對象,假設(shè)指向私有派生的對象那么被制止。l不能將一個聲明為指向派生類對象的指針指向不能將一個聲明為指向派生類對象的指針指向其基類的一個對象。其基類的一個對象。l聲明為指向基類對象的指針,當(dāng)其指向派生類聲明為指向基類對象的指針,當(dāng)其

33、指向派生類對象時,只能利用它來直接訪問派生類中從基對象時,只能利用它來直接訪問派生類中從基類承繼來的成員,不能訪問公有派生類中特定類承繼來的成員,不能訪問公有派生類中特定的成員。的成員。 虛函數(shù)的定義及其運(yùn)用l虛函數(shù)的定義在基類中進(jìn)展,它在基類中需虛函數(shù)的定義在基類中進(jìn)展,它在基類中需求定義為虛函數(shù)的成員函數(shù)的聲明中冠以關(guān)求定義為虛函數(shù)的成員函數(shù)的聲明中冠以關(guān)鍵詞鍵詞 virtual virtual。l基類中某成員函數(shù)聲明為虛函數(shù)后,此虛函基類中某成員函數(shù)聲明為虛函數(shù)后,此虛函數(shù)可以在一個或多個派生類中被重新定義。數(shù)可以在一個或多個派生類中被重新定義。l虛函數(shù)重新定義時,不需求虛函數(shù)重新定義時

34、,不需求virtualvirtual聲明。聲明。l重新定義時,函數(shù)原形,包括前往類型、函重新定義時,函數(shù)原形,包括前往類型、函數(shù)名、參數(shù)個數(shù)、參數(shù)類型的順序,必需與數(shù)名、參數(shù)個數(shù)、參數(shù)類型的順序,必需與基類中的原型完全一致?;愔械脑屯耆恢?。 虛函數(shù)與重載函數(shù)的關(guān)系l普通的函數(shù)重載,函數(shù)的前往類型及所帶的參普通的函數(shù)重載,函數(shù)的前往類型及所帶的參量可以不同,僅是函數(shù)名一樣即可。量可以不同,僅是函數(shù)名一樣即可。l重載虛函數(shù)時,要求函數(shù)名、前往類型、參量重載虛函數(shù)時,要求函數(shù)名、前往類型、參量個數(shù)、參量類型和順序都與基類中原型完全一個數(shù)、參量類型和順序都與基類中原型完全一樣。假設(shè)有不同,按如下

35、處置:樣。假設(shè)有不同,按如下處置:l 1. 1.僅僅前往類型不同,其他均同,作出錯處置僅僅前往類型不同,其他均同,作出錯處置。l 2. 2.函數(shù)原型不同,僅函數(shù)名一樣,系統(tǒng)會將它函數(shù)原型不同,僅函數(shù)名一樣,系統(tǒng)會將它以為是普通的函數(shù)重載,將喪失虛特性。以為是普通的函數(shù)重載,將喪失虛特性。 多承繼中的虛函數(shù)l假設(shè)派生類由多個基類派生的,對派生類中假設(shè)派生類由多個基類派生的,對派生類中的同一個成員函數(shù),有時表達(dá)為虛函數(shù),有的同一個成員函數(shù),有時表達(dá)為虛函數(shù),有時那么只是其某個基類成員的重載函數(shù)。時那么只是其某個基類成員的重載函數(shù)。l虛特性可以傳送。虛特性可以傳送。l留意:指向派生類的指針不能承繼。即:基留意:指向派生類的指針不能承繼。即:基類的指針可以指向它的派生類,但不能指向類的指針可以指向它的派生類,但不能指向它的派生類的派生類。它的派生類的派生類。 純虛函數(shù)的概念純虛函數(shù)的概念l純虛函數(shù)是一個在基類中闡明的虛函純虛函數(shù)是一個在基類中闡明的虛函數(shù),它在該基類中沒有定義,但要求數(shù),它在該基類中沒有定義,但要求任何派生類都必需定義本人的版本。任何派生類都必需定義本人的版本。純虛函數(shù)的定義方式:純虛函數(shù)的定義方式:lvirtual type funcname(virtual t

溫馨提示

  • 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

提交評論