![[高等教育]面向對象復習2012信工ppt課件_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/5/3b05cfa8-d53e-497f-90a5-113f4709e04f/3b05cfa8-d53e-497f-90a5-113f4709e04f1.gif)
![[高等教育]面向對象復習2012信工ppt課件_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/5/3b05cfa8-d53e-497f-90a5-113f4709e04f/3b05cfa8-d53e-497f-90a5-113f4709e04f2.gif)
![[高等教育]面向對象復習2012信工ppt課件_第3頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/5/3b05cfa8-d53e-497f-90a5-113f4709e04f/3b05cfa8-d53e-497f-90a5-113f4709e04f3.gif)
![[高等教育]面向對象復習2012信工ppt課件_第4頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/5/3b05cfa8-d53e-497f-90a5-113f4709e04f/3b05cfa8-d53e-497f-90a5-113f4709e04f4.gif)
![[高等教育]面向對象復習2012信工ppt課件_第5頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/5/3b05cfa8-d53e-497f-90a5-113f4709e04f/3b05cfa8-d53e-497f-90a5-113f4709e04f5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 面向對象的概述面向對象的概述 類及其對象的封裝性類及其對象的封裝性 友員、重載和援用友員、重載和援用 承繼與派生承繼與派生 虛函數與多態性虛函數與多態性 模板模板 復習重點復習重點面向對象的設計方法面向對象的設計方法1 面向對象的思想面向對象的思想2 面向對象的根本概念面向對象的根本概念3 面向對象的根本特性面向對象的根本特性4 C+的初步知識的初步知識本章要求本章要求l熟習面向對象的思想;熟習面向對象的思想;l了解面向對象的根本概念:了解面向對象的根本概念: 對象、類;對象、類;l掌握面向對象的根本特性:封裝性的特點,掌握面向對象的根本特性:封裝性的特點,承繼性的優點和多態性的含義;承繼性
2、的優點和多態性的含義;l掌握掌握C+比比C加強的知識:函數原型與變量加強的知識:函數原型與變量闡明、輸入輸出、闡明、輸入輸出、const闡明符和闡明符和void類型。類型。面向對象的根本概念面向對象的根本概念l 對象l 類面向對象的根本特性面向對象的根本特性l封裝性封裝性l承繼性承繼性l多態性多態性l函數原形闡明函數原形闡明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. 定義常量數組定義常量數組 const float data =1.2,2.5,3.6,4.8,5.5; const闡明符3. const闡明符與函數參數相銜接闡明符與函數參數相銜接例:例:void print_value(const int value) coutvalue; 試圖在該函數體中改動試圖在該函數體中改動const參量參量value的是非法的。的是非法的。 const闡明符4. 定義指針常量,根據定義指針常量
4、,根據const位置的位置的不同含義也不同,有三種方式:不同含義也不同,有三種方式:(1) 指向常量的指針:闡明一個指針變量指向的數指向常量的指針:闡明一個指針變量指向的數據是常量。據是常量。name是指向字符串常量的指針,是指向字符串常量的指針,name指向的字符串不能更改,但指向的字符串不能更改,但name可以更新可以更新 const char *name=“Richard; name=“Martin; 對對 name0=C; 錯錯 const闡明符(2) 常指針常指針: 把指針本身聲明為一個常量,而不是將把指針本身聲明為一個常量,而不是將它指向的對象聲明為常量。它指向的對象聲明為常量。n
5、ame不能更改,不能更改,name指向的內容可更新指向的內容可更新 char *const name=“Richard; name=“Martin; 錯錯 name0=C; 對對(3) 指向常量的常指針指向常量的常指針: 這個指針本身不能改動,它指這個指針本身不能改動,它指向的值也不能改動。向的值也不能改動。name不能更改,不能更改,name指向指向的內容也不能更新的內容也不能更新 const char *const name=“Richard; name=“Martin; 錯錯 name0=C; 錯錯C+C+類及其對象的封裝性類及其對象的封裝性1 類的聲明和對象定義類的聲明和對象定義2 類
6、的成員函數類的成員函數3 對象成員的援用對象成員的援用4 構造函數和析構函數構造函數和析構函數5 對象指針對象指針6 動態存儲動態存儲l掌握類的定義和運用方法。類的聲明包括掌握類的定義和運用方法。類的聲明包括數據數據(數據成員數據成員)和函數和函數(成員函數成員函數);私有;私有成員和公有成員;成員和公有成員;l掌握對象的定義和運用方法;掌握對象的定義和運用方法;l掌握對象的存儲空間及成員函數的存儲方掌握對象的存儲空間及成員函數的存儲方式,對象的存儲空間只計算數據成員的存式,對象的存儲空間只計算數據成員的存儲空間;儲空間;l構造函數對對象初始化;構造函數與類同構造函數對對象初始化;構造函數與類
7、同名,可以接受參數,允許重載。構造函數名,可以接受參數,允許重載。構造函數不能顯式調用;不能顯式調用;本章要求本章要求l析構函數執行與構造函數相反的操作,完析構函數執行與構造函數相反的操作,完成某些清理內存的義務,例如釋放對象占成某些清理內存的義務,例如釋放對象占用的內存空間;用的內存空間;lnew懇求存儲空間,懇求存儲空間,delete釋放用釋放用new懇懇求的存儲空間,配對運用。求的存儲空間,配對運用。l動態創建對象動態創建對象本章要求本章要求 缺省參數的構造函數缺省參數的構造函數l部分參數缺省時,規那么是:部分參數缺省時,規那么是:l 一切取缺省值的參數必需出如今不取一切取缺省值的參數必
8、需出如今不取缺省值的參數的右邊。即一切的缺省參缺省值的參數的右邊。即一切的缺省參數是參數表中最后的參數。數是參數表中最后的參數。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);錯錯 多構造函數l在一個類中有幾個構造函數,適宜不同在一個類中有幾個構造函數,適宜不同的場所,用它們所帶參數的個數或類型的場所,用它們所帶參數的個數或類型的不同而區分。的不同而區分。l定義多構造函數時,參數的個數或類型定義多構造函數時,參數的個數或類型上必需存在差別,否那么會有二義性。上必需存在差別,否那么會有二義性。l在定義多個構造函數,又運用缺省參數在定義多個構造函數,又運用缺省參數時,特別要留意防止出現二義性。時,特別要留意防止出現二義性。 運
10、用缺省參數的構造函數留意:l在構造函數中運用缺省參數提供了建立對象的在構造函數中運用缺省參數提供了建立對象的多種初始化方法,相當于多個重載的構造函數;多種初始化方法,相當于多個重載的構造函數;l應該在聲明構造函數時指定參數的缺省值,而應該在聲明構造函數時指定參數的缺省值,而不能只在定義構造函數時指定缺省值;不能只在定義構造函數時指定缺省值;l假設構造函數的全部參數都指定了缺省值,那假設構造函數的全部參數都指定了缺省值,那么在定義對象時可以不給出,或給出一個、幾么在定義對象時可以不給出,或給出一個、幾個實參;個實參;l在一個類中定義了全部缺省參數的構造函數后,在一個類中定義了全部缺省參數的構造函
11、數后,不能再定義重載構造函數,否那么會出現二義不能再定義重載構造函數,否那么會出現二義性。性。Box(int =10,int =10,int =10); /指定全部參數為缺省參數指定全部參數為缺省參數Box( ); /聲明無參構造函數,是重載構造函數聲明無參構造函數,是重載構造函數Box(int,int); /聲明有聲明有2個參數的構造函數個參數的構造函數假設有以下語句:假設有以下語句:Box box1; /無法確定調用第無法確定調用第1個、還是第個、還是第2個構造函數?個構造函數?Box box2(15,30); /無法確定調用第無法確定調用第1個、還是第個、還是第3個構造函數?個構造函數?
12、 動態存儲動態存儲lC+C+運用運用newnew來動態分配存儲空間,運用來動態分配存儲空間,運用deletedelete來動態釋放存儲空間。來動態釋放存儲空間。l優點:優點:lnewnew自動計算要分配的類型的大小,自動計算要分配的類型的大小,l自動前往正確的指針類型,不用對前往自動前往正確的指針類型,不用對前往指針進展類型轉換指針進展類型轉換l可以用可以用newnew將分配的對象初始化。將分配的對象初始化。 new new的語法格式的語法格式l名字指針名字指針=new =new 名字名字初始化值名字名字初始化值lint int * *s;s;ls=new int(200);s=new int
13、(200);l假設用假設用newnew分配的類型為數組,需求在類型名分配的類型為數組,需求在類型名后綴上數組的大小,后綴上數組的大小,l如如 : int : int * *p=new int10; p=new int10; l假設創建多維數組,必需提供一切維的大小假設創建多維數組,必需提供一切維的大小l如:如: int int * *q=a234;q=a234; delete的語法格式ldelete delete 名字指針名字指針l名字指針是指將要被釋放的那一塊存儲名字指針是指將要被釋放的那一塊存儲空間的起始地址,此存儲空間一定是用空間的起始地址,此存儲空間一定是用newnew分配的。分配的。
14、l假設所釋放的是整個數組占用的空間,假設所釋放的是整個數組占用的空間,可寫成可寫成delete p;delete p;釋放時不需給出數組釋放時不需給出數組的大小。的大小。 析構函數析構函數 l析構函數普通用于收回對象中成員所占析構函數普通用于收回對象中成員所占的存儲空間。的存儲空間。l析構函數名字與類名一樣,只是在前面析構函數名字與類名一樣,只是在前面加了一個符號加了一個符號“ 。它不接受任何參數,。它不接受任何參數,也不前往任何闡明的類型和值。也不前往任何闡明的類型和值。l普通析構函數由一系列的普通析構函數由一系列的delete delete 組成。組成。友元、重載和援用友元、重載和援用l友
15、元友元friend:即類的朋友,不:即類的朋友,不同類的成員函數之間、類的成員函同類的成員函數之間、類的成員函數與普通函數進展數據共享的機制;數與普通函數進展數據共享的機制;l重載重載overloading:同一:同一“符號符號在同一作用域的不同場所具有不在同一作用域的不同場所具有不同的語義實現算法;同的語義實現算法;l援用援用reference:即對象的別名。:即對象的別名。 本章要求l友元:突破了類的數據封裝機制,允許類以外的友元:突破了類的數據封裝機制,允許類以外的函數可以訪問類對象的私有數據,友元分為友員函數可以訪問類對象的私有數據,友元分為友員函數、友元成員和友元類。運用時留意友元的
16、聲函數、友元成員和友元類。運用時留意友元的聲明和定義;明和定義;l重載:是重載:是C+的多態性,同一標識符在不同的場的多態性,同一標識符在不同的場所具有不同的語義。函數重載有構造函數重載、所具有不同的語義。函數重載有構造函數重載、成員函數和非成員函數重載;運算符重載有種方成員函數和非成員函數重載;運算符重載有種方式:重載為類的成員函數和重載為類的友元函數。式:重載為類的成員函數和重載為類的友元函數。l援用:即對象的別名,在創建援用時初始化,且援用:即對象的別名,在創建援用時初始化,且不能再賦值。對援用的操作就是對目的的操作,不能再賦值。對援用的操作就是對目的的操作,用援用傳送參數可改動實參的值
17、,用援用傳送對用援用傳送參數可改動實參的值,用援用傳送對象對象可節省內存,援用函數可被賦值。象對象可節省內存,援用函數可被賦值。 友元的闡明和定義l將外界的某個對象闡明為某一個類的友將外界的某個對象闡明為某一個類的友員,這個外界對象就可以訪問這個類對員,這個外界對象就可以訪問這個類對象中的私有成員。象中的私有成員。l聲明為友員的外界對象既可以是另一個聲明為友員的外界對象既可以是另一個類的成員函數,也可以是不屬于任何類類的成員函數,也可以是不屬于任何類的普通的函數,還可以是整個的一個類的普通的函數,還可以是整個的一個類l友員聲明包含在其私有成員可被訪問的友員聲明包含在其私有成員可被訪問的類的定義
18、中。此聲明可放在公有部分,類的定義中。此聲明可放在公有部分,也可放在私有部分。也可放在私有部分。 友元函數l在一個類中闡明的某個函數不是該類的在一個類中闡明的某個函數不是該類的成員函數,而是獨立于任何類的普通的成員函數,而是獨立于任何類的普通的外界函數,它可以訪問該類中一切對象外界函數,它可以訪問該類中一切對象的私有成員。的私有成員。l定義時,在函數名前加上關鍵詞定義時,在函數名前加上關鍵詞friendfriend 友元類友元類l友元可以是一個類。友元可以是一個類。l作為友元的類中的一切成員函數都可以作為友元的類中的一切成員函數都可以訪問另一個類中的私有成員。訪問另一個類中的私有成員。 函數重
19、載l兩個以上的函數,只需運用不同類型的兩個以上的函數,只需運用不同類型的參數或參數個數不同,編譯器便知道在參數或參數個數不同,編譯器便知道在什么情況下該調用哪一個函數,這就叫什么情況下該調用哪一個函數,這就叫函數重載。函數重載。l構造函數重載構造函數重載l類成員函數重載類成員函數重載l類以外的普通函數重載類以外的普通函數重載 運算符重載l用成員函數重載運算符用成員函數重載運算符l用友元重載運算符用友元重載運算符l運算符運算符 和的重載和的重載l賦值運算符的重載賦值運算符的重載 援用l援用的概念援用的概念l援用參數援用參數l援用前往值援用前往值 援用的概念l援用就是給對象取一個別名,它主要用援用
20、就是給對象取一個別名,它主要用在給函數傳送大型的對象,從函數中前在給函數傳送大型的對象,從函數中前往左值,也可以獨立援用。往左值,也可以獨立援用。l援用定義的關鍵詞是援用定義的關鍵詞是type&type&l int i; int i;l int &j=i; int &j=i;l創建了一個整型援用創建了一個整型援用j j,j j是是i i的地址的地址的別名,的別名,j j是是i i的同義詞,它們表示同一的同義詞,它們表示同一個對象。個對象。 在定義援用時,馬上就要對它進展初始化,在定義援用時,馬上就要對它進展初始化,不可定義完后再賦值。不可定義完后再賦值。 對對象
21、或對援用的任何操作都會影響到它對對象或對援用的任何操作都會影響到它們共同的對象。們共同的對象。 援用一旦被初始化,就不能再重新賦值。援用一旦被初始化,就不能再重新賦值。 需求留意的問題承繼與派生承繼與派生1 承繼與派生的概念承繼與派生的概念2 派生類的聲明方式派生類的聲明方式3 派生類的構成派生類的構成4 派生類成員函數的訪問屬性派生類成員函數的訪問屬性5 派生類的構造函數和析構函數派生類的構造函數和析構函數6 多承繼多承繼7 虛基類虛基類l了解承繼與派生的概念,掌握單承繼和多承了解承繼與派生的概念,掌握單承繼和多承繼的定義方式;繼的定義方式;l掌握承繼的幾種方式:掌握承繼的幾種方式:publ
22、ic承繼、承繼、private承繼和承繼和protected承繼,以及在不同承繼方式承繼,以及在不同承繼方式下基類成員在派生類中的訪問屬性的差別;下基類成員在派生類中的訪問屬性的差別;l熟習派生類構造函數的定義和執行順序;熟習派生類構造函數的定義和執行順序;l掌握多承繼的概念和定義,多承繼構造函數掌握多承繼的概念和定義,多承繼構造函數的定義與執行順序,留意多承繼的二義性;的定義與執行順序,留意多承繼的二義性;l掌握虛基類的定義和初始化。掌握虛基類的定義和初始化。本章要求本章要求派生類對基類成員的訪問權派生類對基類成員的訪問權l基類的私有成員派生類及派生類的運用基類的私有成員派生類及派生類的運用
23、者都無權訪問。者都無權訪問。l對于基類的公有成員的訪問權,在定義對于基類的公有成員的訪問權,在定義派生類時,定義的方式不同,權限也不派生類時,定義的方式不同,權限也不同。同。 私有派生私有派生l由私有派生得到的派生類,對它的基類由私有派生得到的派生類,對它的基類的公有成員只能是私有承繼,基類的一的公有成員只能是私有承繼,基類的一切公有成員都只能成為私有派生類的私切公有成員都只能成為私有派生類的私有成員,這些私有成員只能被派生類的有成員,這些私有成員只能被派生類的成員函數訪問,而派生類的運用者無權成員函數訪問,而派生類的運用者無權訪問。訪問。 公有派生公有派生l基類中一切的公有成員在派生類中也都
24、基類中一切的公有成員在派生類中也都是公有的。是公有的。l公有派生在定義派生類時,在基類標識公有派生在定義派生類時,在基類標識符前加一個符前加一個publicpublic關鍵詞。關鍵詞。 維護派生l基類的基類的protectedprotected成員只能被其派生類的成員只能被其派生類的成員訪問,不能被派生類的外部對象訪成員訪問,不能被派生類的外部對象訪問。問。 派生類的構造函數l在兩種情況下,必需定義派生類的構造函在兩種情況下,必需定義派生類的構造函數數l 派生類本身需求構造函數派生類本身需求構造函數l 在定義派生類對象時,其相應的基類對在定義派生類對象時,其相應的基類對象需調用帶有參數的構造函
25、數。象需調用帶有參數的構造函數。在定義對象時構造函數的執行順序是:先祖在定義對象時構造函數的執行順序是:先祖先基類,再客人對象成員,后本人先基類,再客人對象成員,后本人派生類本身派生類本身在定義對象時構造函數的執行順序是:在定義對象時構造函數的執行順序是:先祖先基類,再客人對象成員,先祖先基類,再客人對象成員,后本人派生類本身后本人派生類本身 派生類的析構函數l在派生類中能否要定義析構函數與它所屬的在派生類中能否要定義析構函數與它所屬的基類無關。基類無關。l假設派生類在退出定義域前有數據需做善后假設派生類在退出定義域前有數據需做善后任務,就需定義析構函數。基類的析構函數任務,就需定義析構函數。
26、基類的析構函數不會由于派生類沒有析構函數而得不到執行。不會由于派生類沒有析構函數而得不到執行。l派生類的析構函數的執行順序正好與構造函派生類的析構函數的執行順序正好與構造函數的執行順序相反:先本人派生類本身,數的執行順序相反:先本人派生類本身,再客人對象成員,后祖先基類再客人對象成員,后祖先基類多承繼構造函數的定義多承繼構造函數的定義l多承繼的構造函數的定義與單承繼的類多承繼的構造函數的定義與單承繼的類似,只是幾個基類的構造函數之間用似,只是幾個基類的構造函數之間用“,分隔。分隔。l 派生類名:派生類名參數表:派生類名:派生類名參數表:基類基類1 1參數表參數表1 1,基類基類n n參數表參數
27、表n n,對象成員,對象成員1 1參數表參數表1 1,對象成對象成員員1 1參數表參數表1 1l l/l 多承繼構造函數的執行順序多承繼構造函數的執行順序先祖先基類,再客人成員對象,先祖先基類,再客人成員對象,后本人派生類,在多個基類之間嚴厲后本人派生類,在多個基類之間嚴厲按照派生定義時從左到右的順序來陳列先按照派生定義時從左到右的順序來陳列先后。后。多承繼的析構函數的調用順序多承繼的析構函數的調用順序與構造函數的調用順序正好相反。與構造函數的調用順序正好相反。 虛基類l虛基類的概念虛基類的概念l虛基類的初始化虛基類的初始化 虛基類的概念l當在多條承繼途徑上有一個公共的基類,當在多條承繼途徑上
28、有一個公共的基類,在這些途徑的集合處,這個公共的基類在這些途徑的集合處,這個公共的基類就會產生多個實例或多個副本,假就會產生多個實例或多個副本,假設只想保管這個基類的一個實例,可以設只想保管這個基類的一個實例,可以將這個公共基類闡明為虛基類。將這個公共基類闡明為虛基類。l定義方法:在定義派生類時,在需定義定義方法:在定義派生類時,在需定義為虛基類的基類描畫前加上為虛基類的基類描畫前加上virtualvirtual關鍵關鍵詞。詞。 虛基類的初始化l虛基類的初始化與普通構造函數的初始化在虛基類的初始化與普通構造函數的初始化在語法上是一樣的,但構造函數的調用次序不語法上是一樣的,但構造函數的調用次序
29、不同。同。l派生類構造函數的調用次序,原那么有三:派生類構造函數的調用次序,原那么有三:l 1. 1.虛基類的構造函數在非虛基類之前調用虛基類的構造函數在非虛基類之前調用l 2. 2.假設同一層次中包含多個虛基類,這些假設同一層次中包含多個虛基類,這些虛基虛基 l 類的構造函數按它們闡明的次序調用類的構造函數按它們闡明的次序調用l 3. 3.假設虛基類由非虛基類派生而來,那么假設虛基類由非虛基類派生而來,那么依然先調用基類的構造函數,再調用派生類依然先調用基類的構造函數,再調用派生類的構造函數。的構造函數。1 多態性多態性2 虛函數虛函數3 純虛函數與籠統類純虛函數與籠統類多態性與虛函數多態性
30、與虛函數l多態性的實現有兩種:早期聯編經過重載實現;多態性的實現有兩種:早期聯編經過重載實現;滯后聯編經過虛函數實現;滯后聯編經過虛函數實現;l對象指針:指向基類類型的指針可以指向其公有對象指針:指向基類類型的指針可以指向其公有派生類對象,但只能訪問從基類承繼的成員;派生類對象,但只能訪問從基類承繼的成員;l虛函數:用于實現滯后聯編,在基類中將成員函虛函數:用于實現滯后聯編,在基類中將成員函數聲明為數聲明為virtual特性,就可以在派生類中對該成特性,就可以在派生類中對該成員函數重新定義定義原型與基類中的完全一員函數重新定義定義原型與基類中的完全一樣,是特殊的函數重載。當基類指針指向派生樣,
31、是特殊的函數重載。當基類指針指向派生類時,即可訪問派生類重新定義的函數;類時,即可訪問派生類重新定義的函數;l籠統類:是指包含純虛函數的類,純虛函數提供籠統類:是指包含純虛函數的類,純虛函數提供了籠統類對派生類的接口。純虛函數是僅在基類了籠統類對派生類的接口。純虛函數是僅在基類中聲明,但必需在派生類中定義不同的實現版本。中聲明,但必需在派生類中定義不同的實現版本。本章要求本章要求 多態性l多態性指不同對象收到一樣的音訊時產多態性指不同對象收到一樣的音訊時產生不同的動作。生不同的動作。C+C+支持兩種多態性,一支持兩種多態性,一種是編譯時的多態性,另一種是運轉時種是編譯時的多態性,另一種是運轉時
32、的多態性。的多態性。l編譯時的多態性編譯時的多態性l運轉時的多態性運轉時的多態性 引入派生類后的對象指針l引入派生概念后,任何被闡明為指向基類對象引入派生概念后,任何被闡明為指向基類對象的指針都可以指向它的公有派生類的指針都可以指向它的公有派生類l可以讓指向基類對象的指針指向它的公有派生可以讓指向基類對象的指針指向它的公有派生的對象,假設指向私有派生的對象那么被制止的對象,假設指向私有派生的對象那么被制止。l不能將一個聲明為指向派生類對象的指針指向不能將一個聲明為指向派生類對象的指針指向其基類的一個對象。其基類的一個對象。l聲明為指向基類對象的指針,當其指向派生類聲明為指向基類對象的指針,當其
33、指向派生類對象時,只能利用它來直接訪問派生類中從基對象時,只能利用它來直接訪問派生類中從基類承繼來的成員,不能訪問公有派生類中特定類承繼來的成員,不能訪問公有派生類中特定的成員。的成員。 虛函數的定義及其運用l虛函數的定義在基類中進展,它在基類中需虛函數的定義在基類中進展,它在基類中需求定義為虛函數的成員函數的聲明中冠以關求定義為虛函數的成員函數的聲明中冠以關鍵詞鍵詞 virtual virtual。l基類中某成員函數聲明為虛函數后,此虛函基類中某成員函數聲明為虛函數后,此虛函數可以在一個或多個派生類中被重新定義。數可以在一個或多個派生類中被重新定義。l虛函數重新定義時,不需求虛函數重新定義時
34、,不需求virtualvirtual聲明。聲明。l重新定義時,函數原形,包括前往類型、函重新定義時,函數原形,包括前往類型、函數名、參數個數、參數類型的順序,必需與數名、參數個數、參數類型的順序,必需與基類中的原型完全一致。基類中的原型完全一致。 虛函數與重載函數的關系l普通的函數重載,函數的前往類型及所帶的參普通的函數重載,函數的前往類型及所帶的參量可以不同,僅是函數名一樣即可。量可以不同,僅是函數名一樣即可。l重載虛函數時,要求函數名、前往類型、參量重載虛函數時,要求函數名、前往類型、參量個數、參量類型和順序都與基類中原型完全一個數、參量類型和順序都與基類中原型完全一樣。假設有不同,按如下
35、處置:樣。假設有不同,按如下處置:l 1. 1.僅僅前往類型不同,其他均同,作出錯處置僅僅前往類型不同,其他均同,作出錯處置。l 2. 2.函數原型不同,僅函數名一樣,系統會將它函數原型不同,僅函數名一樣,系統會將它以為是普通的函數重載,將喪失虛特性。以為是普通的函數重載,將喪失虛特性。 多承繼中的虛函數l假設派生類由多個基類派生的,對派生類中假設派生類由多個基類派生的,對派生類中的同一個成員函數,有時表達為虛函數,有的同一個成員函數,有時表達為虛函數,有時那么只是其某個基類成員的重載函數。時那么只是其某個基類成員的重載函數。l虛特性可以傳送。虛特性可以傳送。l留意:指向派生類的指針不能承繼。即:基留意:指向派生類的指針不能承繼。即:基類的指針可以指向它的派生類,但不能指向類的指針可以指向它的派生類,但不能指向它的派生類的派生類。它的派生類的派生類。 純虛函數的概念純虛函數的概念l純虛函數是一個在基類中闡明的虛函純虛函數是一個在基類中闡明的虛函數,它在該基類中沒有定義,但要求數,它在該基類中沒有定義,但要求任何派生類都必需定義本人的版本。任何派生類都必需定義本人的版本。純虛函數的定義方式:純虛函數的定義方式:lvirtual type funcname(virtual t
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥品配送夜間管理制度
- 藥店中藥倉庫管理制度
- 藥店常規用品管理制度
- 營林項目結賬管理制度
- 設備借用使用管理制度
- 設備安全工具管理制度
- 設備數據聯動管理制度
- 設備點檢包機管理制度
- 設備設施節能管理制度
- 設計公司電腦管理制度
- 金融系統反洗錢考試題庫(含答案)
- 甘肅省張掖市2023年中考地理真題試題(含解析)
- 人教小學數學五年級下冊綜合與實踐《怎樣通知最快》示范公開課教學課件
- 脫不花三十天溝通訓練營
- 2023年湖南常德中考語文真題及答案
- “滾球法”計算接閃器保護范圍
- 生產專案持續改善工作匯報
- 2022年南通如皋市醫療系統事業編制鄉村醫生招聘筆試試題及答案解析
- SB/T 10347-2017糖果壓片糖果
- GB/T 7689.2-2013增強材料機織物試驗方法第2部分:經、緯密度的測定
- GB/T 35124-2017天文望遠鏡技術要求
評論
0/150
提交評論