版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、類和對象-1,崔克彬ncepuckb@163.com,目錄,5.1 類的定義 5.2 對象的定義 5.3 對象的初始化 5.4 成員函數(shù)的特性 5.5 靜態(tài)成員 5.6 友元 5.7 類的作用域 5.8 局部類和嵌套類(自學(xué)) 5.9 對象的生存周期,5.1 類的定義,類的定義: 類是一種復(fù)雜的數(shù)據(jù)類型,它是將不同的類型的數(shù)據(jù)和與這些數(shù)據(jù)相關(guān)的操作封裝在一起的集合體。類是面向?qū)?/p>
2、象程序設(shè)計的核心 ;類是一種用戶自定義類型,是一種通過抽象數(shù)據(jù)類型的方法由用戶構(gòu)造的新型的數(shù)據(jù)類型; 類的結(jié)構(gòu)由其內(nèi)部數(shù)據(jù)結(jié)構(gòu)和相關(guān)的操作決定,并通過操作接口來描述,操作接口又被稱為這類對象向其他對象提供的服務(wù)。,5.1 類的定義,類的定義格式: class { public:
3、 private: }; ,5.1 類的定義,類的定義格式: 說明: 類的成員分為數(shù)據(jù)成員和成員函數(shù)類的成員的訪問權(quán)限分三類:公有的(public)、私有的(private)和保護的(protected); public、priva
4、te和protected被稱為訪問權(quán)限修飾符/訪問控制修飾符,說明類或成員的訪問權(quán)限: 公有成員不僅可以被類的成員函數(shù)引用,而且可以在程序中被引用 => 公有成員提供了類的接口功能 私有成員只能被類的成員或友元函數(shù)所引用,在程序中不可訪問,5.1 類的定義,類的定義格式: 說明:類的成員函數(shù)可以在類體內(nèi)定義,也可以在類體外定義。當(dāng)成員函數(shù)在類體外定義時,需定義為以下格式: ::
5、() :: —— 作用域運算符,用來標(biāo)識該成員函數(shù)屬于哪個類。,5.1 類的定義,例5.1:定義一個關(guān)于日期的類,類的說明部分: class TDate { public: void SetDate(int y,int m,int d); int IsLeapYear( ); void Print( );
6、 private: int year,month,day; },類中定義了6個類成員:3個成員函數(shù),3個數(shù)據(jù)成員,;,5.1 類的定義,例5.1:定義一個關(guān)于日期的類,成員函數(shù)如果定義在類體外,需要在函數(shù)頭前加上函數(shù)所屬的類的標(biāo)識符,使用作用域運算符::,類的實現(xiàn)部分,,,,,,,,,,類的公有成員可訪問類的私有成員,5.1 類的定義,例5.1:定義一個關(guān)于日期的類,成
7、員函數(shù)如果定義在類體內(nèi),則與一般函數(shù)的定義一樣,類的另一種實現(xiàn)方式,;,5.1 類的定義,注意事項: ① 在類體內(nèi)不允許對所定義的數(shù)據(jù)成員進行初始化操作,,×,② 類的數(shù)據(jù)成員的類型可以是普通的數(shù)據(jù)類型:整型、浮點型、字符型、數(shù)組、指針和引用等,也可以為對象——另一個類的對象可以作為該類的成員,該類的指針或引用也可以作為該類的成員,但該類自身的對象不可以作為該類的成員,5.1 類的定義,注意事項:,,√,,5.1 類的
8、定義,注意事項:,,,√,×,√,5.1 類的定義,注意事項:③ 通常將對于類的說明部分或整個類的定義部分放到一個單獨的頭文件中: 例如,可將之前定義的TDate類放到名為tdate.h的頭文件中,目錄,5.1 類的定義 5.2 對象的定義 5.3 對象的初始化 5.4 成員函數(shù)的特性 5.5 靜態(tài)成員 5.6 友元 5.7 類的作用域 5.8 局部類和嵌套類(自學(xué))
9、 5.9 對象的生存周期,5.2 對象的定義,對象是類的實例,類是某一類對象的抽象 對象屬于某個已知類,定義對象之前要先定義該對象的類,例: TDate date1,date2,*Pdate,date[31];,對象的定義格式: ,5.2 對象的定義,對象成員(數(shù)據(jù)成員/成員函數(shù))的表示方法: 一般對象: ·
10、 · ()例: TDate date1; date1.year,date1.month,date1.day date1.SetDate(y, m, d),5.2 對象的定義,對象成員(數(shù)據(jù)成員/成員函數(shù))的表示方法: 指向?qū)ο蟮闹羔槪悍绞舰伲?—> —> ()例: TDat
11、e ﹡Pdate; Pdate—>year, Pdate—>month, Pdate—>day Pdate—>SetDate(y, m, d)方式②: (﹡) · (﹡) · ()例: TDate *Pdate;(﹡Pdate) · year, (﹡Pdate) · mont
12、h, (﹡Pdate) · day (﹡Pdate) · SetDate(y, m, d),5.2 對象的定義,對象成員(數(shù)據(jù)成員/成員函數(shù))的表示方法:對象引用: · · ()例: TDate date1,&rdate=date1; rdate.year, rdate.month, rdate.day
13、 rdate.SetDate(y, m, d) 說明: 同一個類創(chuàng)建的不同對象,其數(shù)據(jù)結(jié)構(gòu)相同——系統(tǒng)為其分配相同長度的內(nèi)存單元。但其內(nèi)容有可能不同; 同一個類創(chuàng)建的不同對象,共享類中的成員函數(shù) =>系統(tǒng)只為所定義的對象提供數(shù)據(jù)成員的內(nèi)存空間,5.2 對象的定義,例5.1:分析程序的輸出結(jié)果,5.2 對象的定義,例5.1:分析程序的輸出結(jié)果,//系統(tǒng)只為所定義的對象提供數(shù)據(jù)成員的內(nèi)存空間,,5.2 對象的定義,例
14、5.1:分析程序的輸出結(jié)果,//系統(tǒng)只為所定義的對象提供數(shù)據(jù)成員的內(nèi)存空間,//對象調(diào)用類的成員函數(shù),,1996,5,4,5.2 對象的定義,例5.1:分析程序的輸出結(jié)果,//系統(tǒng)只為所定義的對象提供數(shù)據(jù)成員的內(nèi)存空間,//對象調(diào)用類的成員函數(shù),,1996,5,4,1998,4,9,5.2 對象的定義,例5.1:分析程序的輸出結(jié)果,//系統(tǒng)只為所定義的對象提供數(shù)據(jù)成員的內(nèi)存空間,//對象調(diào)用類的成員函數(shù),,1996,5,4,1998
15、,4,9,int leap,,,date1.year,1,5.2 對象的定義,例5.1:分析程序的輸出結(jié)果,//系統(tǒng)只為所定義的對象提供數(shù)據(jù)成員的內(nèi)存空間,//對象調(diào)用類的成員函數(shù),1996,5,4,1998,4,9,int leap,1,,,,,5.2 對象的定義,例5.1:分析程序的輸出結(jié)果,//系統(tǒng)只為所定義的對象提供數(shù)據(jù)成員的內(nèi)存空間,//對象調(diào)用類的成員函數(shù),1996,5,4,1998,4,9,int leap,1,,,,
16、,5.2 對象的定義,例5.1:分析程序的輸出結(jié)果,//系統(tǒng)只為所定義的對象提供數(shù)據(jù)成員的內(nèi)存空間,//對象調(diào)用類的成員函數(shù),結(jié)論?,1、在程序中,可以訪問類的公有成員2、類的成員函數(shù)只能通過該類定義的對象來調(diào)用,5.2 對象的定義,例5.1:分析程序的輸出結(jié)果,//系統(tǒng)只為所定義的對象提供數(shù)據(jù)成員的內(nèi)存空間,//對象調(diào)用類的成員函數(shù),問題?,×,5.2 對象的定義,例5.1:分析程序的輸出結(jié)果,//系統(tǒng)只為所定義的對
17、象提供數(shù)據(jù)成員的內(nèi)存空間,//對象調(diào)用類的成員函數(shù),結(jié)論?,類的私有成員不能被程序所訪問,只能被類的成員函數(shù)所訪問,5.2 對象的定義,例5.2:分析程序的輸出結(jié)果,5.2 對象的定義,例5.2:分析程序的輸出結(jié)果,,,數(shù)據(jù)成員,5.2 對象的定義,例5.2:分析程序的輸出結(jié)果,,3,5,5.2 對象的定義,例5.2:分析程序的輸出結(jié)果,,3,5,8,10,5.2 對象的定義,例5.2:分析程序的輸出結(jié)果,3,5,8,10,,
18、5,6,5.2 對象的定義,例5.2:分析程序的輸出結(jié)果,3,5,8,10,,5,6,9,8,5.2 對象的定義,例5.2:分析程序的輸出結(jié)果,3,5,8,10,5,6,9,8,,,5.2 對象的定義,例5.2:分析程序的輸出結(jié)果,3,5,8,10,5,6,9,8,,,目錄,5.1 類的定義 5.2 對象的定義 5.3 對象的初始化 5.4 成員函數(shù)的特性 5.5 靜態(tài)成員 5.6 友元 5.7
19、 類的作用域 5.8 局部類和嵌套類(自學(xué)) 5.9 對象的生存周期,5.3 對象的初始化,5.3.1 構(gòu)造函數(shù)和析構(gòu)函數(shù) 5.3.2 缺省構(gòu)造函數(shù)和缺省析構(gòu)函數(shù) 5.3.3 拷貝初始化構(gòu)造函數(shù),5.3 對象的初始化,回顧:TDate類與TPoint類初始化對象的方式,,,5.3 對象的初始化,回顧:TDate類與TPoint類初始化對象的方式,,,5.3 對象的初始化,總結(jié): 對對象進行初始化,實際就是對對象
20、的數(shù)據(jù)成員(屬性)進行初始化操作;類中都定義了一類函數(shù)實現(xiàn)對對象的初始化操作——即為對象的數(shù)據(jù)成員賦初始值(例如TDate::SetDate(int y,int m,int d)函數(shù),TPoint::SetPoint(int x,int y)函數(shù))。,類中是否有一類函數(shù)專門實現(xiàn)對對象的初始化?這類函數(shù)是否有特定的語法規(guī)則?,5.3 對象的初始化,在創(chuàng)建對象時對對象進行初始化操作的類的成員函數(shù)稱為構(gòu)造函數(shù) 在對象刪除時對對象進行釋放
21、操作的類的成員函數(shù)稱為析構(gòu)函數(shù),構(gòu)造函數(shù)和析構(gòu)函數(shù),以日期類TDate類為例,構(gòu)造該類的構(gòu)造函數(shù)和析構(gòu)函數(shù),5.3 對象的初始化,構(gòu)造函數(shù)的特點: 構(gòu)造函數(shù)是類的成員函數(shù),可以定義在類體內(nèi),也可以定義在類體外; 構(gòu)造函數(shù)的函數(shù)名必須與類名相同;構(gòu)造函數(shù)的返回值類型不指定說明,具有隱含的函數(shù)返回值,該值由系統(tǒng)內(nèi)部使用;,TDate類的構(gòu)造函數(shù):函數(shù)名為TDate,TDate類的構(gòu)造函數(shù):TDate函數(shù)不指明返回值類型,構(gòu)造函數(shù)和
22、析構(gòu)函數(shù),5.3 對象的初始化,構(gòu)造函數(shù)的特點: 構(gòu)造函數(shù)可以有一個參數(shù),也可以有多個參數(shù);,構(gòu)造函數(shù)的作用是對類的數(shù)據(jù)成員進行初始化操作,所以定義TDate類的構(gòu)造函數(shù)如下:class TDate{ public: TDate(int y,int m,int d) { year=y; month=m; day=d;} private: int year,month
23、,day;};,構(gòu)造函數(shù)和析構(gòu)函數(shù),5.3 對象的初始化,構(gòu)造函數(shù)的特點:構(gòu)造函數(shù)可以重載,即同一個類中可以定義多個參數(shù)不同的構(gòu)造函數(shù); 程序中不能直接調(diào)用構(gòu)造函數(shù),在創(chuàng)建對象時系統(tǒng)自動調(diào)用構(gòu)造函數(shù)。,void main(){ TDate date1(2000,3,10);},TDate(int y,int m,int d) { year=y; month=m; day=d;},//對對象進行初始
24、化操作,,系統(tǒng)自動調(diào)用類的構(gòu)造函數(shù),構(gòu)造函數(shù)和析構(gòu)函數(shù),5.3 對象的初始化,析構(gòu)函數(shù)的特點:析構(gòu)函數(shù)是類的成員函數(shù),可以定義在類體內(nèi),也可以定義在類體外; 析構(gòu)函數(shù)的函數(shù)名與類名相同,前面加~字符用來與構(gòu)造函數(shù)進行區(qū)別;析構(gòu)函數(shù)不指定函數(shù)的返回值類型,也沒有參數(shù); 析構(gòu)函數(shù)不可以重載,即一個類中只能定義一個析構(gòu)函數(shù);,構(gòu)造函數(shù)和析構(gòu)函數(shù),TDate類的析構(gòu)函數(shù):函數(shù)名為~TDate,TDate類的析構(gòu)函數(shù):定義為~TDat
25、e( );,5.3 對象的初始化,析構(gòu)函數(shù)的特點:析構(gòu)函數(shù)可以被程序調(diào)用,也可以由系統(tǒng)調(diào)用自動。在下面兩種情況下,析構(gòu)函數(shù)會被系統(tǒng)自動調(diào)用: 如果一個對象被定義在函數(shù)體內(nèi),則當(dāng)函數(shù)結(jié)束時,該對象的析構(gòu)函數(shù)會被自動調(diào)用; 如果一個對象是用new運算符被動態(tài)創(chuàng)建的,則在使用delete運算符釋放它時,delete將會自動調(diào)用析構(gòu)函數(shù)。,構(gòu)造函數(shù)和析構(gòu)函數(shù),void main(){ TDate date1(2000,3,10
26、);},,系統(tǒng)自動調(diào)用類的析構(gòu)函數(shù),~TDate( ){ },5.3 對象的初始化,重新定義日期TDate類(保存在tdate.h中),,,,5.3 對象的初始化,例5.3:分析程序的輸出結(jié)果,,,系統(tǒng)自動調(diào)用類的構(gòu)造函數(shù),ty.year=1998,ty.month=4,ty.day=9,輸出:Constructor called.,,輸出:Constructor called.,5.3 對象的初始化,例5.3:分析程序的輸出結(jié)果
27、,,系統(tǒng)自動調(diào)用類的構(gòu)造函數(shù),ty.year=1998,ty.month=4,ty.day=9,tm.year=1998,tm.month=4,tm.day=10,輸出:Constructor called.Constructor called.,輸出:Constructor called.Constructor called.,5.3 對象的初始化,例5.3:分析程序的輸出結(jié)果,對象調(diào)用類的成員函數(shù),ty.year=1998,
28、ty.month=4,ty.day=9,tm.year=1998,tm.month=4,tm.day=10,,,,today.year,,,today.month,,,today.day,輸出:Constructor called.Constructor called.today is 1998.4.9,5.3 對象的初始化,例5.3:分析程序的輸出結(jié)果,ty.year=1998,ty.month=4,ty.day=9,tm.ye
29、ar=1998,tm.month=4,tm.day=10,,,tomor.year,,,tomor.month,,,tomor.day,輸出:Constructor called.Constructor called.today is 1998.4.9tomorrow is 1998.4.10,,輸出:Constructor called.Constructor called.today is 1998.4.9tomor
30、row is 1998.4.10,5.3 對象的初始化,例5.3:分析程序的輸出結(jié)果,ty.year=1998,ty.month=4,ty.day=9,tm.year=1998,tm.month=4,tm.day=10,輸出:Constructor called.Constructor called.today is 1998.4.9tomorrow is 1998.4.10Destructor called.,系統(tǒng)自動調(diào)用類
31、的析構(gòu)函數(shù),,,,,輸出:Constructor called.Constructor called.today is 1998.4.9tomorrow is 1998.4.10,5.3 對象的初始化,例5.3:分析程序的輸出結(jié)果,ty.year=1998,ty.month=4,ty.day=9,tm.year=1998,tm.month=4,tm.day=10,輸出:Constructor called.Construct
32、or called.today is 1998.4.9tomorrow is 1998.4.10Destructor called.,系統(tǒng)自動調(diào)用類的析構(gòu)函數(shù),,,,,輸出:Constructor called.Constructor called.today is 1998.4.9tomorrow is 1998.4.10Destructor called.Destructor called.,,,,5.3 對象
33、的初始化,5.3.1 構(gòu)造函數(shù)和析構(gòu)函數(shù) 5.3.2 缺省構(gòu)造函數(shù)和缺省析構(gòu)函數(shù) 5.3.3 拷貝初始化構(gòu)造函數(shù),5.3 對象的初始化,缺省構(gòu)造函數(shù): 在定義類時沒有定義任何構(gòu)造函數(shù),則編譯器自動生成一個不帶參數(shù)的缺省構(gòu)造函數(shù): ::( ) { } 缺省析構(gòu)函數(shù): 在定義類時沒有定義任何析構(gòu)函數(shù),則編譯
34、器自動生成一個不帶參數(shù)的缺省析構(gòu)函數(shù): ::( ) { },缺省構(gòu)造函數(shù)和缺省析構(gòu)函數(shù),說明:用缺省構(gòu)造函數(shù)對對象初始化時,對 象的所有數(shù)據(jù)成員都初始化為零或空,說明:缺省析構(gòu)函數(shù)是空函數(shù),5.3 對象的初始化,5.3.1 構(gòu)造函數(shù)和析構(gòu)函數(shù) 5.3.2 缺省構(gòu)造函數(shù)和缺省析構(gòu)函數(shù) 5.3.3 拷貝初始化構(gòu)造函數(shù),5
35、.3 對象的初始化,當(dāng)用一個已知的對象來初始化同類的另一個被創(chuàng)建的對象時,可調(diào)用拷貝初始化構(gòu)造函數(shù)。 格式:::(const &),拷貝初始化構(gòu)造函數(shù),5.3 對象的初始化,當(dāng)用一個已知的對象來初始化同類的另一個被創(chuàng)建的對象時,可調(diào)用拷貝初始化構(gòu)造函數(shù)。格式:::(const &),拷貝初始化構(gòu)造函數(shù),例,定義TDate類的拷貝初始化構(gòu)造函數(shù):TDate(const TDate &d){ year=
36、d.year; month=d.month; day=d.day; },拷貝初始化構(gòu)造函數(shù)也是構(gòu)造函數(shù),它將一個已知對象的數(shù)據(jù)成員的值拷貝給創(chuàng)建的同類的另一個對象; 該函數(shù)只有一個參數(shù),是對同類進行賦值的對象的引用; 每個類都需有一個拷貝初始化構(gòu)造函數(shù);如果類中沒有說明,則編譯系統(tǒng)自動生成一個缺省的拷貝初始化構(gòu)造函數(shù),作為該類的公有成員。,5.3 對象的初始化,例5.4:重新定義點類TPoint (存到tpoint1.h中),,,5
37、.3 對象的初始化,例5.5:分析程序輸出結(jié)果,,,5.3 對象的初始化,例5.5:分析程序輸出結(jié)果,,輸出:Copy_initialization Constructor called.,5.3 對象的初始化,例5.5:分析程序輸出結(jié)果,,,輸出:Copy_initialization Constructor called.,輸出:Copy_initialization Constructor called.P2=5,7,5.
38、3 對象的初始化,例5.5:分析程序輸出結(jié)果,輸出:Copy_initialization Constructor called.P2=5,7,,輸出:Copy_initialization Constructor called.P2=5,7Destructor called.,5.3 對象的初始化,例5.5:分析程序輸出結(jié)果,輸出:Copy_initialization Constructor called.P2=5,7
39、Destructor called.,,輸出:Copy_initialization Constructor called.P2=5,7Destructor called.Destructor called.,5.3 對象的初始化,例5.5:分析程序輸出結(jié)果,,,5.3 對象的初始化,例5.5:分析程序輸出結(jié)果,,輸出:Copy_initialzation Constrctor called.,5.3 對象的初始化,例5.5
40、:分析程序輸出結(jié)果,,輸出:Copy_initialzation Constrctor called.,5.3 對象的初始化,例5.5:分析程序輸出結(jié)果,,輸出:Copy_initialzation Constrctor called.,輸出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.,5.3 對象的初始化,例5.5:分析程
41、序輸出結(jié)果,輸出:Copy_initialzation Constrctor called.,輸出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.,輸出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.Ok,5.3 對象的初始
42、化,例5.5:分析程序輸出結(jié)果,輸出:Copy_initialzation Constrctor called.,輸出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.,輸出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.Ok
43、,5.3 對象的初始化,例5.5:分析程序輸出結(jié)果,輸出:Copy_initialzation Constrctor called.,輸出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.,輸出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor
44、called.ok,,x=30,5.3 對象的初始化,例5.5:分析程序輸出結(jié)果,輸出:Copy_initialzation Constrctor called.,輸出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.,輸出:Copy_initialzation Constrctor called.Copy_initialza
45、tion Constrctor called.ok,x=30,,y=55,5.3 對象的初始化,例5.5:分析程序輸出結(jié)果,輸出:Copy_initialzation Constrctor called.,輸出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.,輸出:Copy_initialzation Constrctor c
46、alled.Copy_initialzation Constrctor called.ok,x=30,y=55,,5.3 對象的初始化,例5.5:分析程序輸出結(jié)果,輸出:Copy_initialzation Constrctor called.,輸出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.,輸出:Copy_initi
47、alzation Constrctor called.Copy_initialzation Constrctor called.ok,x=30,y=55,,由于不能返回main主函數(shù),所以將R的值暫時賦給一個匿名對象。需要調(diào)用拷貝初始化構(gòu)造函數(shù),5.3 對象的初始化,例5.5:分析程序輸出結(jié)果,輸出:Copy_initialzation Constrctor called.,輸出:Copy_initialzation Cons
48、trctor called.Copy_initialzation Constrctor called.,輸出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.ok,x=30,y=55,輸出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor ca
49、lled.okCopy_initialzation Constrctor called.,5.3 對象的初始化,例5.5:分析程序輸出結(jié)果,x=30,y=55,輸出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.,輸出:Copy_initialz
50、ation Constrctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.Destructor called.Destructor called.,調(diào)用兩次,分別釋放對象R和對象Q,,5.3 對象的初始化,例5.5:分析程序輸出結(jié)果,x=30,y=55,輸出:Copy_initialzation Co
51、nstrctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.Destructor called.Destructor called.,,5.3 對象的初始化,例5.5:分析程序輸出結(jié)果,x=30,y=55,輸出:Copy_initialzation Constrctor called.Copy_ini
52、tialzation Constrctor called.okCopy_initialzation Constrctor called.Destructor called.Destructor called.,5.3 對象的初始化,例5.5:分析程序輸出結(jié)果,x=30,y=55,輸出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor call
53、ed.okCopy_initialzation Constrctor called.Destructor called.Destructor called.,,調(diào)用一次,釋放匿名對象A,賦值結(jié)束,需要釋放匿名對象A,5.3 對象的初始化,例5.5:分析程序輸出結(jié)果,x=30,y=55,輸出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor c
54、alled.okCopy_initialzation Constrctor called.Destructor called.Destructor called.,輸出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.Destructor ca
55、lled.Destructor called.Destructor called.,輸出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.Destructor called.Destructor called.Destructor called
56、.,5.3 對象的初始化,例5.5:分析程序輸出結(jié)果,,,5.3 對象的初始化,例5.5:分析程序輸出結(jié)果,輸出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.Destructor called.Destructor called.Destruc
57、tor called.,輸出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.Destructor called.Destructor called.Destructor called.P=30,55,5.3 對象的初始化,例5.5:分析程序輸出
58、結(jié)果,輸出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.Destructor called.Destructor called.Destructor called.,輸出:Copy_initialzation Constrctor calle
59、d.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.Destructor called.Destructor called.Destructor called.P=30,55,,調(diào)用三次,分別釋放對象N、對象P和對象M,5.3 對象的初始化,例5.5:分析程序輸出結(jié)果,輸出:Copy_initialzation Con
60、strctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.Destructor called.Destructor called.Destructor called.,輸出:Copy_initialzation Constrctor called.Copy_initialzation Constrc
61、tor called.okCopy_initialzation Constrctor called.Destructor called.Destructor called.Destructor called.P=30,55,輸出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.okCopy_initialzation
62、Constrctor called.Destructor called.Destructor called.Destructor called.P=30,55Destructor called.Destructor called.Destructor called.,5.3 對象的初始化,拷貝初始化構(gòu)造函數(shù),拷貝初始化構(gòu)造函數(shù)的功能就是用一個已知的對象來初始化另一個對象;調(diào)用拷貝初始化構(gòu)造函數(shù)的三種情況: 明確表示由一
63、個對象初始化另一個對象時: 例:TPoint P2(P1); 當(dāng)對象作為函數(shù)參數(shù)傳遞給函數(shù)形參時: 例:P=f(N); 當(dāng)對象作為函數(shù)返回值時: 例:return R;,目錄,5.1 類的定義 5.2 對象的定義 5.3 對象的初始化 5.4 成員函數(shù)的特性 5.5 靜態(tài)成員 5.6 友元 5.7 類的作用域 5.
64、8 局部類和嵌套類(自學(xué)) 5.9 對象的生存周期,5.4 成員函數(shù)的特性,一般的成員函數(shù)都可以重載,但析構(gòu)函數(shù)不可重載,重載性,例5.7:分析程序輸出結(jié)果,,5.4 成員函數(shù)的特性,例5.7:分析程序輸出結(jié)果,,,,,5.4 成員函數(shù)的特性,例5.7:分析程序輸出結(jié)果,,,,輸出:a=10,20,5.4 成員函數(shù)的特性,例5.7:分析程序輸出結(jié)果,,,,輸出:a=10,20,輸出:a=10,20b=4,16,
65、5.4 成員函數(shù)的特性,例5.7:分析程序輸出結(jié)果,,,,b.X=4,b.Y=16,i,,i=30,5.4 成員函數(shù)的特性,例5.7:分析程序輸出結(jié)果,,,,,b.X=4,b.Y=16,i=30,j,j=12,5.4 成員函數(shù)的特性,例5.7:分析程序輸出結(jié)果,,,,,k,k=10,5.4 成員函數(shù)的特性,例5.7:分析程序輸出結(jié)果,k=10,輸出:a=10,20b=4,16,輸出:a=10,20b=4,163012
66、10,5.4 成員函數(shù)的特性,設(shè)置參數(shù)的缺省值,一般的成員函數(shù)和構(gòu)造函數(shù)均可被設(shè)置參數(shù)的缺省值,回顧:參數(shù)的缺省值,給形參賦默認(rèn)值(缺省值),可以是數(shù)值,也可以是任意表達式; 函數(shù)調(diào)用時,編譯器按從左向右的順序?qū)崊⑴c形參結(jié)合,當(dāng)實參的數(shù)目不足時,編譯器將用函數(shù)說明或定義時形參的默認(rèn)值補足所缺少的實參; 一個指定了默認(rèn)值的參數(shù)右邊不能出現(xiàn)沒有指定默認(rèn)值的參數(shù)。,5.4 成員函數(shù)的特性,例5.8:分析程序輸出結(jié)果,,構(gòu)造函數(shù)設(shè)置
67、參數(shù)的缺省值,5.4 成員函數(shù)的特性,例5.8:分析程序輸出結(jié)果,,,5.4 成員函數(shù)的特性,例5.8:分析程序輸出結(jié)果,,,,輸出:X=3,5,7Y=9,11,7Z=13,15,17,目錄,5.1 類的定義 5.2 對象的定義 5.3 對象的初始化 5.4 成員函數(shù)的特性 5.5 靜態(tài)成員 5.6 友元 5.7 類的作用域 5.8 局部類和嵌套類(自學(xué)) 5.9 對象的生存
68、周期,5.5 靜態(tài)成員,思考,1、類的成員函數(shù)之間如何實現(xiàn)數(shù)據(jù)的共享? 例:M::f1(int x) { sum+=x;} … M::f2(int y)
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論