第5章類與對象ppt課件_第1頁
第5章類與對象ppt課件_第2頁
第5章類與對象ppt課件_第3頁
第5章類與對象ppt課件_第4頁
第5章類與對象ppt課件_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第5章 類與對象 第第5章章 類與對象類與對象內(nèi)容提要內(nèi)容提要v本章作為面向?qū)ο蟪绦蚓幊谈祝瑢⒁婎惖母靖拍?、類的定義方法。重點引見類的成員函數(shù)、數(shù)據(jù)成員以及類的訪問限制。v引見構(gòu)造函數(shù)和析構(gòu)函數(shù)的定義和運用以及如何重載構(gòu)造函數(shù)。v引見this指針以及const修飾符第第5章章 類與對象類與對象5.1 類的定義類的定義v 類源于現(xiàn)實生活中,是所遇見的實真實在的對象,對每類源于現(xiàn)實生活中,是所遇見的實真實在的對象,對每個對象的認(rèn)識就需求籠統(tǒng)的概念,分類的結(jié)果使對象更個對象的認(rèn)識就需求籠統(tǒng)的概念,分類的結(jié)果使對象更加詳細(xì)和細(xì)化。加詳細(xì)和細(xì)化。v 例如:問什么是桑塔那?回答是一種小汽車;再問什么

2、例如:問什么是桑塔那?回答是一種小汽車;再問什么是小汽車?普通回答是一種交通工具等等。在面向?qū)ο笫切∑??普通回答是一種交通工具等等。在面向?qū)ο蟮挠嬎銠C世界里,一輛實真實在的桑塔納小汽車稱為類的計算機世界里,一輛實真實在的桑塔納小汽車稱為類桑塔納的實例或?qū)ο?。類桑塔納是類小汽車的一個子類,桑塔納的實例或?qū)ο蟆n惿K{是類小汽車的一個子類,而類小汽車是類交通工具的一個子類,等等。在本章中,而類小汽車是類交通工具的一個子類,等等。在本章中,要引入全新的編程思想,就是類的概念。要引入全新的編程思想,就是類的概念。 第第5章章 類與對象類與對象類類v 類是對客觀事物的一種高度籠統(tǒng),是具有一組一樣屬性和

3、操作的集合,因此它包括兩個部分的內(nèi)容:數(shù)據(jù)成員和成員函數(shù),其定義格式為:v class vpublic:v /數(shù)據(jù)成員或者成員函數(shù)vprivate:v /數(shù)據(jù)成員或者成員函數(shù)vprotected:v /數(shù)據(jù)成員或者成員函數(shù)v ;v v 類的定義和構(gòu)造的定義有些類似,但是類和構(gòu)造有本質(zhì)的區(qū)別:類定義中默許的情況下成員是private的,而構(gòu)造定義中的默許成員是public的。在C言語中,構(gòu)造中不允許有成員函數(shù),在C+言語中可以有成員函數(shù)。v 對象:程序中用來描畫一個個的詳細(xì)實體。 第第5章章 類與對象類與對象幾點闡明幾點闡明v 1 1大括號的部分是類的成員數(shù)據(jù)成員和函數(shù)成員,它們分成三大括號的部

4、分是類的成員數(shù)據(jù)成員和函數(shù)成員,它們分成三部分,分別由部分,分別由privateprivate、publicpublic、proctectedproctected三個關(guān)鍵字后跟冒號來指三個關(guān)鍵字后跟冒號來指定。這三部分可以任何順序出現(xiàn),且在一個類的定義中,這三部分并定。這三部分可以任何順序出現(xiàn),且在一個類的定義中,這三部分并非必需同時出現(xiàn)。非必需同時出現(xiàn)。v 2 2類中數(shù)據(jù)成員不允許運用表達(dá)式進(jìn)展初始化;類中數(shù)據(jù)成員不允許運用表達(dá)式進(jìn)展初始化;v 3 3類中數(shù)據(jù)成員與成員函數(shù)可用類中數(shù)據(jù)成員與成員函數(shù)可用constconst修飾。修飾。v 4 4經(jīng)常習(xí)慣地將類定義的闡明部分或者整個定義部分經(jīng)常

5、習(xí)慣地將類定義的闡明部分或者整個定義部分( (包含實現(xiàn)部包含實現(xiàn)部分分) )放到一個頭文件中。見放到一個頭文件中。見P144P144、P146P146第第5章章 類與對象類與對象運用C+言語的類案例稱號:運用C+言語的類#include class person / 建立類稱號為personpublic: char * name; int height;/ 描畫身高 int weight;/ 描畫體重;void main()person Zhang_three; / 建立Zhang_three實例對象Zhang_ = 張三; / Chang_three的名字張三Zhang_

6、three.height = 175; / Chang_three的身高175Zhang_three.weight = 60; / Chang_three的體重60cout 名字 : Zhang_ n身高 : Zhang_three.height n體重 : Zhang_three.weight endl;第第5章章 類與對象類與對象運用構(gòu)造來實現(xiàn)運用構(gòu)造來實現(xiàn)v struct Personstruct Personv v char name20; char name20;v int height; int height; / / 描畫身高描畫身高v int weight;

7、 int weight; / / 描畫體重描畫體重v ;v int main(int argc, char int main(int argc, char * *argv)argv)v v Person pr1=“ Person pr1=“張三張三, 175,60;, 175,60;v cout cout v pr1.height pr1.height v pr2.weight endl; pr2.weight endl;v v 第第5章章 類與對象類與對象5.2 5.2 數(shù)據(jù)成員數(shù)據(jù)成員 v 數(shù)據(jù)成員又叫成員變量或者屬性。數(shù)據(jù)成員的聲明方式和變量的數(shù)據(jù)成員

8、又叫成員變量或者屬性。數(shù)據(jù)成員的聲明方式和變量的聲明方式根本一樣,格式為:聲明方式根本一樣,格式為:“ ;,v 在聲明一個數(shù)據(jù)成員時,需求留意兩點:在聲明一個數(shù)據(jù)成員時,需求留意兩點:v 1不能采用不能采用auto、extern和和register修飾符進(jìn)展修飾;修飾符進(jìn)展修飾;v 2只需采用只需采用static修飾符聲明的靜態(tài)數(shù)據(jù)成員才可以被顯式初修飾符聲明的靜態(tài)數(shù)據(jù)成員才可以被顯式初始化,它具有特殊的屬性。假設(shè)試圖在類體中直接初始化非靜態(tài)始化,它具有特殊的屬性。假設(shè)試圖在類體中直接初始化非靜態(tài)數(shù)據(jù)成員,會導(dǎo)致編譯錯誤。數(shù)據(jù)成員,會導(dǎo)致編譯錯誤。第第5章章 類與對象類與對象成員函數(shù)成員函數(shù)

9、v成員函數(shù)又叫方法,方法就是函數(shù),當(dāng)函數(shù)被成員函數(shù)又叫方法,方法就是函數(shù),當(dāng)函數(shù)被類封裝的時候稱之為方法。類封裝的時候稱之為方法。v成員函數(shù)在類體中的聲明方式和普通函數(shù)的聲成員函數(shù)在類體中的聲明方式和普通函數(shù)的聲明方式一樣,成員函數(shù)可以在類體內(nèi)被定義,明方式一樣,成員函數(shù)可以在類體內(nèi)被定義,也可以在類體外被定義。在類體內(nèi)被定義被以也可以在類體外被定義。在類體內(nèi)被定義被以為是內(nèi)聯(lián)函數(shù)。為是內(nèi)聯(lián)函數(shù)。 第第5章章 類與對象類與對象在類中定義成員函數(shù)案例稱號:在類中定義成員函數(shù)#include class person / 建立類稱號為personpublic: char * name; int h

10、eight; / 描畫身高 int weight; / 描畫體重void After_OneYear()height += 10;weight -= 10;void main()person Zhang_three;/ 建立Zhang_three實例對象Zhang_ = “張三; / Chang_three的名字張三Zhang_three.height = 175;/ Chang_three的身高175Zhang_three.weight = 60;/ Chang_three的體重60 Zhang_three.After_OneYear(); /調(diào)用方法cout 名字 :

11、Zhang_ n身高 : Zhang_three.height n體重: Zhang_three.weight “-,才干訪問類對象的成員。,才干訪問類對象的成員。v 其中,其中,“.“.用于類對象或援用,用于類對象或援用,“-“-用于指向類對象的指針,用于指向類對象的指針,運用指針定義對象就需求運用運用指針定義對象就需求運用“-“-, 第第5章章 類與對象類與對象類對象成員的訪問案例稱號:類對象成員的訪問# include class Tdate private:int month;public:void setMonth(int d)month = d;int getM

12、onth()return month;void main()Tdate b ;b .setMonth(10);cout b.getMonth() endl;第第5章章 類與對象類與對象5.6 5.6 類的作用域和對象的生存期類的作用域和對象的生存期v 內(nèi)即為類作用域內(nèi)即為類作用域v 在類作用域中聲明的標(biāo)識符只在該類中具有可見性在類作用域中聲明的標(biāo)識符只在該類中具有可見性v 成員名限定:類中一個成員名字可以運用類名和作用域成員名限定:類中一個成員名字可以運用類名和作用域運算符來顯式指定運算符來顯式指定v class C class C void C:set(int val)void C:set(

13、int val)vpublic: public: v C:value= val;C:value= val;vvoid set(int val); void set(int val); return;return;vprivate:private: vint value;int value;v ;第第5章章 類與對象類與對象 對象從誕生到終了的這段時間就是它的生存期。 對象的生存期可以分為靜態(tài)生存期和動態(tài)生存期兩種。靜態(tài)生存期假設(shè)對象生存期與程序生存期一樣,我們稱它具有靜態(tài)生存期。在文件中聲明的對象都是具有靜態(tài)生存期的。假設(shè)要在函數(shù)內(nèi)部的塊作用域中聲明具有靜態(tài)生存期的對象,那么要運用關(guān)鍵字sta

14、tic,動態(tài)生存期動態(tài)生存期對象誕生于聲明點,終了于該標(biāo)識符作用域終了處。 動態(tài)生存期例子:Circle gc; /具有靜態(tài)生存期,文件作用域void main() gc.SetRadius(7); gc.PrintCircumference(); Circle c; /聲明具有動態(tài)作用域的對象c c.SetRadius(5); /援用對象c c.PrintCircumference();第第5章章 類與對象類與對象5.8 5.8 對象的初始化對象的初始化v 而當(dāng)對象被定義時,由于對象的意義表達(dá)了現(xiàn)實世界的實體,而當(dāng)對象被定義時,由于對象的意義表達(dá)了現(xiàn)實世界的實體,所以一旦定義對象,就必需有一

15、個有意義的初始值,在所以一旦定義對象,就必需有一個有意義的初始值,在C+C+中,中,在定義對象的同時,給該對象初始化的方法就是利用構(gòu)造函數(shù)。在定義對象的同時,給該對象初始化的方法就是利用構(gòu)造函數(shù)。下面分別從三個方面講述初始化問題:下面分別從三個方面講述初始化問題:v 1 1、類中數(shù)據(jù)成員的初始化:構(gòu)造函數(shù)和析構(gòu)函數(shù)、類中數(shù)據(jù)成員的初始化:構(gòu)造函數(shù)和析構(gòu)函數(shù)v 2 2、類中常量和援用的初始化:初始化表、類中常量和援用的初始化:初始化表v 3 3、類中對象成員的初始化:初始化表、類中對象成員的初始化:初始化表v 4 4、類的對象初始化:拷貝構(gòu)造函數(shù)、類的對象初始化:拷貝構(gòu)造函數(shù)第第5章章 類與對象

16、類與對象(1)(1)構(gòu)造函數(shù)的概念構(gòu)造函數(shù)的概念 v 構(gòu)造函數(shù)的功能是在創(chuàng)建對象時,運用給定的值來將對構(gòu)造函數(shù)的功能是在創(chuàng)建對象時,運用給定的值來將對象初始化。象初始化。v 其聲明格式為其聲明格式為“ ( ( ););v 需求留意的是,構(gòu)造函數(shù)的稱號必需與類稱號一樣。構(gòu)需求留意的是,構(gòu)造函數(shù)的稱號必需與類稱號一樣。構(gòu)造函數(shù)沒有任何的前往值,所以不能有前往類型,構(gòu)造造函數(shù)沒有任何的前往值,所以不能有前往類型,構(gòu)造函數(shù)不能被聲明為函數(shù)不能被聲明為constconst類型。類型。第第5章章 類與對象類與對象構(gòu)造函數(shù)的概念案例稱號:構(gòu)造函數(shù)的概念# include class Tdate privat

17、e:int month;public:Tdate()cout 自動調(diào)用構(gòu)造函數(shù) endl;void main()Tdate * b = new Tdate();delete b;第第5章章 類與對象類與對象構(gòu)造函數(shù)的特點如下:構(gòu)造函數(shù)的特點如下:v 1) 1) 構(gòu)造函數(shù)是成員函數(shù),函數(shù)體可寫在類體內(nèi),也可定在類體構(gòu)造函數(shù)是成員函數(shù),函數(shù)體可寫在類體內(nèi),也可定在類體外。外。2) 2) 構(gòu)造函數(shù)是一個特殊的函數(shù),構(gòu)造函數(shù)是一個特殊的函數(shù),v 該函數(shù)的名字與類名一樣該函數(shù)的名字與類名一樣; ;v 該函數(shù)不指定類型闡明該函數(shù)不指定類型闡明, ,它有隱含的前往值,該值由它有隱含的前往值,該值由系統(tǒng)內(nèi)部運

18、用。系統(tǒng)內(nèi)部運用。v 該函數(shù)可以一個參數(shù),也可以有多個參數(shù)。該函數(shù)可以一個參數(shù),也可以有多個參數(shù)。3)3)可以定義多個構(gòu)造函數(shù)。即構(gòu)造函數(shù)可以重載,也就是可以定可以定義多個構(gòu)造函數(shù)。即構(gòu)造函數(shù)可以重載,也就是可以定義多個參數(shù)個數(shù)不同的函數(shù)。義多個參數(shù)個數(shù)不同的函數(shù)。. .。v 4) 4) 程序中不能直接調(diào)用構(gòu)造函數(shù),在創(chuàng)建對象時系統(tǒng)自動調(diào)用程序中不能直接調(diào)用構(gòu)造函數(shù),在創(chuàng)建對象時系統(tǒng)自動調(diào)用構(gòu)造函數(shù)。構(gòu)造函數(shù)。第第5章章 類與對象類與對象重載構(gòu)造函數(shù)重載構(gòu)造函數(shù) class Tdate private:int month;public:Tdate(int m)month = m;cout mo

19、nth endl;Tdate() month = 100;cout month endl;void main()Tdate * b = new Tdate(10); /調(diào)用調(diào)用Tdate(int m)函數(shù)函數(shù)delete b; Tdate * t = new Tdate(); /調(diào)用調(diào)用Tdate()函數(shù)函數(shù)delete b;第第5章章 類與對象類與對象(2)(2)析構(gòu)函數(shù)的概念析構(gòu)函數(shù)的概念 v析構(gòu)函數(shù)也是一個特殊的成員函數(shù),當(dāng)析構(gòu)函數(shù)也是一個特殊的成員函數(shù),當(dāng)deletedelete一個類對象的時候,會被系統(tǒng)自動調(diào)用。一個類對象的時候,會被系統(tǒng)自動調(diào)用。v析構(gòu)函數(shù)并不是必需的。析構(gòu)函數(shù)的函

20、數(shù)名和析構(gòu)函數(shù)并不是必需的。析構(gòu)函數(shù)的函數(shù)名和類名一樣,并在前面加一個波浪號類名一樣,并在前面加一個波浪號“,沒有,沒有任何參數(shù),不前往任何值,聲明格式為:任何參數(shù),不前往任何值,聲明格式為:“ “ ( ); ( );。 第第5章章 類與對象類與對象析構(gòu)函數(shù)的運用案例稱號:析構(gòu)函數(shù)的運用# include class Tdate private:int month;public:Tdate()cout 自動調(diào)用構(gòu)造函數(shù) endl;Tdate()cout 自動調(diào)用析構(gòu)函數(shù) endl;void main()Tdate * b = new Tdate();delete b;第第5章章 類與對象類與對

21、象析構(gòu)函數(shù)的特點如下:析構(gòu)函數(shù)的特點如下:v 1 1析構(gòu)函數(shù)是成員函數(shù),函數(shù)體可寫在類體內(nèi),也可定在類體外。析構(gòu)函數(shù)是成員函數(shù),函數(shù)體可寫在類體內(nèi),也可定在類體外。v 2 2析構(gòu)函數(shù)也是一個特殊的函數(shù)析構(gòu)函數(shù)也是一個特殊的函數(shù)v 它的名字同類名,并在前面加它的名字同類名,并在前面加“字符,用來與構(gòu)造函數(shù)加字符,用來與構(gòu)造函數(shù)加以區(qū)別;以區(qū)別;v 析構(gòu)函數(shù)不指定數(shù)據(jù)類型,并且也沒有參數(shù)。析構(gòu)函數(shù)不指定數(shù)據(jù)類型,并且也沒有參數(shù)。v 3 3一個類中只能夠定義一個析構(gòu)函數(shù)。一個類中只能夠定義一個析構(gòu)函數(shù)。v 4 4析構(gòu)函數(shù)可以被調(diào)用,也可以系統(tǒng)調(diào)用。在下面兩種情況下,析構(gòu)函析構(gòu)函數(shù)可以被調(diào)用,也可以系

22、統(tǒng)調(diào)用。在下面兩種情況下,析構(gòu)函數(shù)會被自動調(diào)用。數(shù)會被自動調(diào)用。 假設(shè)一個對象被定義在一個函數(shù)體內(nèi),那么當(dāng)這個函數(shù)終了時,假設(shè)一個對象被定義在一個函數(shù)體內(nèi),那么當(dāng)這個函數(shù)終了時,該對象的析構(gòu)函數(shù)被自動調(diào)用。該對象的析構(gòu)函數(shù)被自動調(diào)用。 當(dāng)一個對象是運用當(dāng)一個對象是運用newnew運算符被動態(tài)創(chuàng)建的,在運用運算符被動態(tài)創(chuàng)建的,在運用deletedelete運算運算符釋放它時,符釋放它時,deletedelete將會自動調(diào)用析構(gòu)函數(shù)。將會自動調(diào)用析構(gòu)函數(shù)。第第5章章 類與對象類與對象缺省構(gòu)造函數(shù)和缺省析構(gòu)函數(shù)v 在類定義時沒有定義任何構(gòu)造函數(shù)時,那么編譯器自動生成一個不帶參數(shù)在類定義時沒有定義任何

23、構(gòu)造函數(shù)時,那么編譯器自動生成一個不帶參數(shù)的缺省構(gòu)造函數(shù),其格式如下:的缺省構(gòu)造函數(shù),其格式如下: :()() v v 同理,假設(shè)一個類中沒有定義析構(gòu)函數(shù)時,那么編譯系統(tǒng)也生同理,假設(shè)一個類中沒有定義析構(gòu)函數(shù)時,那么編譯系統(tǒng)也生成一個稱為缺省析構(gòu)函數(shù),缺省析構(gòu)函數(shù)是一個空函數(shù),其格式如下:成一個稱為缺省析構(gòu)函數(shù),缺省析構(gòu)函數(shù)是一個空函數(shù),其格式如下: : v 第第5章章 類與對象類與對象(3) (3) 類中常量和援用的初始化類中常量和援用的初始化v 上一小節(jié)講述了運用析構(gòu)函數(shù)對數(shù)據(jù)成員變量的初始上一小節(jié)講述了運用析構(gòu)函數(shù)對數(shù)據(jù)成員變量的初始化,那么如何初始化常量和援用?運用初始化表,化,那么如

24、何初始化常量和援用?運用初始化表,留意在類定義中不能直接用。留意在類定義中不能直接用。#includeclass initi_data private: int x; int ℞ const float pi; public: initi_data(int x1):rx(x),pi(3.14) x=x1; void display ( ) cout x= x , rx= rx , pi= pi endl; ; void main( ) initi_data ob(100); ob.display( ); 結(jié)果:結(jié)果: x= 100, rx=100, pi=3.14那么,從左邊例子

25、中可以看出,初始化表的格式:構(gòu)造函數(shù):援用名變量,常量名常數(shù), 第第5章章 類與對象類與對象4 4類類中中對對象成象成員員的初始化的初始化v 1. 1. 對象成員的概念對象成員的概念 C+ C+中允許將一個已定義的類的對象作為另一個類的數(shù)據(jù)中允許將一個已定義的類的對象作為另一個類的數(shù)據(jù)成員,這稱為類的組合。當(dāng)一個類的成員是某一個類的對象時,成員,這稱為類的組合。當(dāng)一個類的成員是某一個類的對象時,那么稱該對象為對象成員或子對象那么稱該對象為對象成員或子對象) )。如:。如:class Aclass A ;class Bclass B private:private: A a; A a; publ

26、ic:public: ; ; 在類中出現(xiàn)了子對象或稱對象成員時,該類的構(gòu)造函數(shù)要包含對子對象的初始化,通常采用成員初始化表的方法來初始化子對象。在成員初始化表中包含對子對象的初始化和對類中其他成員的初始化。第第5章章 類與對象類與對象組合類對象初始化語法格式組合類對象初始化語法格式v在創(chuàng)建一個組合類的對象時,不僅會調(diào)用它本在創(chuàng)建一個組合類的對象時,不僅會調(diào)用它本身的構(gòu)造函數(shù),而且還調(diào)用其對象成員的構(gòu)造身的構(gòu)造函數(shù),而且還調(diào)用其對象成員的構(gòu)造函數(shù),調(diào)用順序為先調(diào)用對象成員構(gòu)造函數(shù),函數(shù),調(diào)用順序為先調(diào)用對象成員構(gòu)造函數(shù),再執(zhí)行本類構(gòu)造函數(shù)的函數(shù)體。語法格式為:再執(zhí)行本類構(gòu)造函數(shù)的函數(shù)體。語法格式

27、為:v類名類名:類名形參表:內(nèi)嵌對象類名形參表:內(nèi)嵌對象1 1形參表,形參表,內(nèi)嵌對象內(nèi)嵌對象2 2形參表,形參表, v下面舉一例子闡明成員初始化的構(gòu)造。下面舉一例子闡明成員初始化的構(gòu)造。第第5章章 類與對象類與對象v #include #include class Aclass A private: private: int A1, A2; int A1, A2; public: public: A(int i, int j) A1=i; A(int i, int j) A1=i; A2=j; A2=j; void print() void print() coutA1“,coutA1“,A

28、2endl; A2endl; v ; ;class Bclass B private: private: A a; / A a; /對象成員對象成員 int b; int b;public:public: B(int i, int j, int B(int i, int j, int k):a(i, j), b(k)k):a(i, j), b(k) void print(); void print();void B:print() a.print(); coutbendl;void main() B b(6, 7, 8); b.print();該程序的輸出結(jié)果為: 6,7 8第第5章章 類與對

29、象類與對象v 其中,其中,a(i, j), b(k)a(i, j), b(k)是成員初始化表,它有二項,前一項是成員初始化表,它有二項,前一項為哪一項給子對象為哪一項給子對象a a初始化,其格式如下:初始化,其格式如下: ( () 后一項為哪一項給類后一項為哪一項給類B B的數(shù)據(jù)成員的數(shù)據(jù)成員b b初始化。這一項也可初始化。這一項也可以寫在構(gòu)造函數(shù)的函數(shù)體內(nèi),運用賦值表達(dá)式語句以寫在構(gòu)造函數(shù)的函數(shù)體內(nèi),運用賦值表達(dá)式語句b = k;b = k; 給類給類B B的數(shù)據(jù)成員初始化。的數(shù)據(jù)成員初始化。第第5章章 類與對象類與對象5 5拷貝構(gòu)造函數(shù)用對象給對象賦值拷貝構(gòu)造函數(shù)用對象給對象賦值v 拷貝構(gòu)

30、造函數(shù)的功能是用于實現(xiàn)對象值的拷貝,經(jīng)過將一個同類拷貝構(gòu)造函數(shù)的功能是用于實現(xiàn)對象值的拷貝,經(jīng)過將一個同類對象的值拷貝給一個新對象,來完成對新對象的初始化,即用一對象的值拷貝給一個新對象,來完成對新對象的初始化,即用一個對象去構(gòu)造另外一個對象。個對象去構(gòu)造另外一個對象。v 拷貝構(gòu)造函數(shù)是拷貝構(gòu)造函數(shù)是C+C+中引入的一種新的構(gòu)造函數(shù)。定義一個拷貝中引入的一種新的構(gòu)造函數(shù)。定義一個拷貝構(gòu)造函數(shù)的方式是:構(gòu)造函數(shù)的方式是:v 類名類名const const 類名類名 & &方式參數(shù)方式參數(shù)v 函數(shù)體函數(shù)體 v 由此可看出:由此可看出:v 拷貝構(gòu)造函數(shù)的稱號與類的稱號一樣,且它只需一

31、個參數(shù),該參拷貝構(gòu)造函數(shù)的稱號與類的稱號一樣,且它只需一個參數(shù),該參數(shù)就是對該類對象的援用。數(shù)就是對該類對象的援用。第第5章章 類與對象類與對象v 在下述三種情況下,需求用拷貝初始化構(gòu)造函數(shù)來用一個對象初在下述三種情況下,需求用拷貝初始化構(gòu)造函數(shù)來用一個對象初始化另一個對象。始化另一個對象。 1 1明確表示由一個對象初始化另一個對象時,如:明確表示由一個對象初始化另一個對象時,如:TPoint TPoint P2(P1);P2(P1); 2 2當(dāng)對象作為函數(shù)實參傳送給函數(shù)形參時,如:上例當(dāng)對象作為函數(shù)實參傳送給函數(shù)形參時,如:上例 P = P = f(N);f(N); 3 3當(dāng)對象用為函數(shù)前往

32、值時。當(dāng)對象用為函數(shù)前往值時。v 假設(shè)類中沒有闡明拷貝初始化構(gòu)造函數(shù),那么編譯系統(tǒng)自動生成假設(shè)類中沒有闡明拷貝初始化構(gòu)造函數(shù),那么編譯系統(tǒng)自動生成一個具有上述方式的缺省拷貝初始化構(gòu)造函數(shù)。作為該類的公有一個具有上述方式的缺省拷貝初始化構(gòu)造函數(shù)。作為該類的公有成員。成員。第第5章章 類與對象類與對象實例拷貝構(gòu)造函數(shù)實例拷貝構(gòu)造函數(shù)v ExampleExample是一個人員信息類。用普通構(gòu)造函數(shù)生成是一個人員信息類。用普通構(gòu)造函數(shù)生成obj1obj1,用拷貝構(gòu)造,用拷貝構(gòu)造函數(shù)生成函數(shù)生成obj2obj2。v class Exampleclass Examplev private: private

33、:v char char * *name;name;v int num; int num; v public: public:v Example(int i, char Example(int i, char * *str ) / str ) / 構(gòu)造函數(shù)定構(gòu)造函數(shù)定義義v name=str; name=str;v num=i; num=i; v Example(const Example &x) / Example(const Example &x) / 拷貝構(gòu)造函數(shù)定義拷貝構(gòu)造函數(shù)定義v num=x.num; num=x.num; v void list() / void list() / 定義顯定義顯示函數(shù)示函數(shù)list list v cout cout數(shù)據(jù)成員數(shù)據(jù)成員numnum的值的值=numendlendl; =numendlendl; v ;第第5章章 類

溫馨提示

  • 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

提交評論