C面向?qū)ο蟪绦蛟O(shè)計(jì)課件_第1頁(yè)
C面向?qū)ο蟪绦蛟O(shè)計(jì)課件_第2頁(yè)
C面向?qū)ο蟪绦蛟O(shè)計(jì)課件_第3頁(yè)
C面向?qū)ο蟪绦蛟O(shè)計(jì)課件_第4頁(yè)
C面向?qū)ο蟪绦蛟O(shè)計(jì)課件_第5頁(yè)
已閱讀5頁(yè),還剩132頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、C+面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院羅憲面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院1C+面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院面向?qū)ο蟪绦蛟O(shè)計(jì)信息第三章 類和對(duì)象(教材P180-P288)本章主要介紹:類和對(duì)象的基本概念(類的定義、對(duì)象的定義)構(gòu)造函數(shù)與析構(gòu)函數(shù)(對(duì)象的初始化)對(duì)象數(shù)組、對(duì)象指針及引用向函數(shù)傳遞對(duì)象靜態(tài)成員常量對(duì)象及常量成員友元對(duì)象成員對(duì)象的存儲(chǔ)類標(biāo)識(shí)符的作用域、可見性和名空間面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院2第三章 類和對(duì)象(教材P180-P288)本章主要介紹:第一節(jié) 類和對(duì)象的基本概念一、結(jié)構(gòu)與類 C+中的類實(shí)際上是在C語(yǔ)言的結(jié)構(gòu)體的基礎(chǔ)上擴(kuò)充得到的。即C+的結(jié)構(gòu)體的成員中可用函

2、數(shù)成員函數(shù):C+結(jié)構(gòu)體的成員分為數(shù)據(jù)成員及成員函數(shù)數(shù)據(jù)成員分為公有成員(public)、私有成員(private)、保護(hù)成員(protected)。 C+對(duì)結(jié)構(gòu)的擴(kuò)充例【3.1】 已知復(fù)數(shù)的實(shí)部、虛部,分別輸出復(fù)數(shù)的實(shí)部、虛部及絕對(duì)值初步熟悉成員函數(shù)面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院3第一節(jié) 類和對(duì)象的基本概念一、結(jié)構(gòu)與類面向?qū)ο蟪绦蛟O(shè)計(jì)信息第一節(jié) 類和對(duì)象的基本概念#include #include struct complex double real; double imag; void init(double r,double i) real=r;imag=i; double realc

3、omplex( ) return real; double imagcomplex( ) return imag; double abscomplex( ) double t; t=sqrt(real*real+imag*imag); return t;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院4第一節(jié) 類和對(duì)象的基本概念#include iostre第一節(jié) 類和對(duì)象的基本概念void main() complex A; A.init(3.0,4.0); cout real of complex A=; cout A.realcomplex()endl; cout imag of complex A=

4、; cout A.imagcomplex()endl; cout abs of complex A= ; cout A.abscomplex()endl;程序運(yùn)行輸出結(jié)果:real of complex A=3imag of complex A=4abs of complex A=5面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院5第一節(jié) 類和對(duì)象的基本概念void main()程序運(yùn)行輸?shù)谝还?jié) 類和對(duì)象的基本概念C+結(jié)構(gòu)的擴(kuò)充:在C+中,在定義一個(gè)結(jié)構(gòu)時(shí),可以定義成員函數(shù);如程序中的init( )、realcomplex( )、imagcomplex( )、abscomplex ( )等;在C+的結(jié)構(gòu)中,

5、成員分公有成員(public)和私有成員(private),私有成員只能在結(jié)構(gòu)內(nèi)使用,公有成員既可以在結(jié)構(gòu)內(nèi)使用,亦可在其它地方使用;在結(jié)構(gòu)中,未指明為公有成員或私有成員的成員默認(rèn)為公有成員;成員函數(shù)的調(diào)用方法:結(jié)構(gòu)變量.成員函數(shù)(實(shí)參表);上例結(jié)構(gòu)體的定義部分程序可改為:面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院6第一節(jié) 類和對(duì)象的基本概念C+結(jié)構(gòu)的擴(kuò)充:面向?qū)ο蟪绦蛟O(shè)第一節(jié) 類和對(duì)象的基本概念struct complex private double real; double imag; public void init(double r,double i) real=r;imag=i; doub

6、le realcomplex( ) return real; double imagcomplex( ) return imag; double abscomplex( ) double t; t=sqrt(real*real+imag*imag); return t;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院7第一節(jié) 類和對(duì)象的基本概念struct complex面向第一節(jié) 類和對(duì)象的基本概念 C+對(duì)結(jié)構(gòu)的擴(kuò)充類C+提供了一種比結(jié)構(gòu)體更為安全的數(shù)據(jù)類型類。類與結(jié)構(gòu)的擴(kuò)充形式非常相似,但凡是未定義為公有成員(public)或保護(hù)成員(protected)的成員均為私有成員(private)封裝性的體現(xiàn)

7、。例【3.2】將例【3.1】用類定義。 面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院8第一節(jié) 類和對(duì)象的基本概念 C+對(duì)結(jié)構(gòu)的擴(kuò)充類面第一節(jié) 類和對(duì)象的基本概念#include #include class complex private: double real; double imag; public: void init(double r,double i) real=r;imag=i; double realcomplex( )return real; double imagcomplex( )return imag; double abscomplex( ) double t; t=sqrt(

8、real*real+imag*imag); return t;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院9第一節(jié) 類和對(duì)象的基本概念#include iostre第一節(jié) 類和對(duì)象的基本概念void main() complex A; A.init(3.0,4.0); cout real of complex A=; coutA.realcomplex()endl; cout imag of complex A=; coutA.imagcomplex()endl; cout abs of complex A= ; coutA.abscomplex()endl;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院10第一節(jié)

9、 類和對(duì)象的基本概念void main()面向?qū)ο蟪痰谝还?jié) 類和對(duì)象的基本概念 類的聲明(定義)1、格式:class 類名 private : 私有數(shù)據(jù)成員或成員函數(shù) public : 公有數(shù)據(jù)成員或成員函數(shù) protected 保護(hù)數(shù)據(jù)成員或成員函數(shù) ;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院11第一節(jié) 類和對(duì)象的基本概念 類的聲明(定義)class第一節(jié) 類和對(duì)象的基本概念2、說(shuō)明:類的聲明(定義)中,private、protected、public可以按任意順序出現(xiàn)任意次;但通常private放在前面,protected放在中間,public放在最后面;類中的數(shù)據(jù)成員通常說(shuō)明為私有成員,而成員

10、函數(shù)通常說(shuō)明公有成員,保護(hù)成員主要用作繼承。面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院12第一節(jié) 類和對(duì)象的基本概念2、說(shuō)明:面向?qū)ο蟪绦蛟O(shè)計(jì)信息科第一節(jié) 類和對(duì)象的基本概念例【3.3】定義一個(gè)日期類,其要求為:設(shè)置年、月、日的具體值;判斷該年是否為閏年;顯示年、月、日1、分析類名(抽象數(shù)據(jù)類型):Date數(shù)據(jù)成員:用整型數(shù)year、month、 day表示年 、月、日;成員函數(shù)(對(duì)Date的操作): setdate( ):設(shè)置日期 isleapyear( ):判斷是否為閏年 printdate( ):顯示日期面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院13第一節(jié) 類和對(duì)象的基本概念例【3.3】定義一個(gè)日期類,

11、其要第一節(jié) 類和對(duì)象的基本概念2、類的定義#includeclass Date private: int year,month,day; public:setdate(int y=2000,int m=1,int d=1)year=y;month=m;day=d;int isleapyear(void);void printdate(void)coutyear-month-dayendl;int Date:isleapyear(void) int p; p=(year%4=0&year%100!=0)|(year%400=0); return p;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院14第一節(jié)

12、類和對(duì)象的基本概念2、類的定義#includei第一節(jié) 類和對(duì)象的基本概念4、類的測(cè)試(主函數(shù))void main(void) Date da1,da2; da1.setdate(2004,5,1); da2.setdate(2006,10,1); da1.printdate(); da2.printdate(); cout2004 year ; if(da1.isleapyear()coutis a leap year.endl; elsecoutis not a leap year.endl; cout2006 year ; if(da2.isleapyear()coutis a leap

13、 year.endl; elsecoutis not a leap year.endl;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院15第一節(jié) 類和對(duì)象的基本概念4、類的測(cè)試(主函數(shù))void 第一節(jié) 類和對(duì)象的基本概念 成員訪問限制1、公有成員:public所定義的成員是開放的,可在任何地方訪問(類內(nèi)部及程序的其他地方);2、私有成員:private 所定義的成員是隱藏的,只能在類內(nèi)部訪問,不能在程序的其他地方訪問;3、保護(hù)成員:protected 所定義的成員是半開放的,可在類內(nèi)部訪問,也可在其派生類中訪問,但不能在程序的其他部分訪問。 數(shù)據(jù)成員通常定義為私有成員,以實(shí)現(xiàn)數(shù)據(jù)的隱藏;成員函數(shù)通常設(shè)為

14、公有的,以通過(guò)消息傳遞訪問數(shù)據(jù)成員;保護(hù)成員主要用于繼承。面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院16第一節(jié) 類和對(duì)象的基本概念 成員訪問限制面向?qū)ο蟪绦蛟O(shè)第一節(jié) 類和對(duì)象的基本概念二、數(shù)據(jù)成員1、一般定義格式:類型 數(shù)據(jù)成員名2、說(shuō)明數(shù)據(jù)成員中,不能使用auto、register、extern等進(jìn)行說(shuō)明;(請(qǐng)思考為什么?);定義類時(shí),計(jì)算機(jī)并不給數(shù)據(jù)成員分配內(nèi)存空間,在定義對(duì)象時(shí)才分配空間;不能在定義時(shí)給類中的成員賦初值。(請(qǐng)思考為什么)數(shù)據(jù)成員既可為基本數(shù)據(jù)類型,也可以是復(fù)雜數(shù)據(jù)類型(數(shù)組、指針、引用、結(jié)構(gòu)體,也可以是類變量等)面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院17第一節(jié) 類和對(duì)象的基本概念二、

15、數(shù)據(jù)成員面向?qū)ο蟪绦蛟O(shè)計(jì)信息第一節(jié) 類和對(duì)象的基本概念三、成員函數(shù)在面向?qū)ο蟪绦蛟O(shè)計(jì)中,成員函數(shù)也稱方法是面向?qū)ο蟪绦蛟O(shè)計(jì)消息傳遞機(jī)制的實(shí)現(xiàn)方式。 在類外定義 在類中只給出成員函數(shù)的原型,成員函數(shù)體在類的外部定義。格式: 返回類型 類名:函數(shù)名(形參表) 函數(shù)體例【3.4】定義座標(biāo)點(diǎn)的類point 面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院18第一節(jié) 類和對(duì)象的基本概念三、成員函數(shù)面向?qū)ο蟪绦蛟O(shè)計(jì)信息第一節(jié) 類和對(duì)象的基本概念1、分析 類名(抽象數(shù)據(jù)類型):Point 數(shù)據(jù)成員:用實(shí)型數(shù)表示點(diǎn)的x、y坐標(biāo); 成員函數(shù)(對(duì)Point的操作): set_point( ):設(shè)置點(diǎn)的坐標(biāo); read_x( )

16、:讀取x值; read_y( ):讀取y值; move( ):點(diǎn)的移動(dòng);2、類的定義面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院19第一節(jié) 類和對(duì)象的基本概念1、分析面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)第一節(jié) 類和對(duì)象的基本概念class point private: float x,y; public:void set_point(float a,float b);float read_x(void);float read_y(void);void move(float a,float b);void point:set_point(float a=0,float b=0) x=a ; y=b; float po

17、int:read_x(void) return x;float point:read_y(void) return y;void point:move (float a,float b) x+=a;y+=b;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院20第一節(jié) 類和對(duì)象的基本概念class point面向?qū)ο蟪痰谝还?jié) 類和對(duì)象的基本概念3、類的測(cè)試將類的定義放在頭文件hpoint.h中。再在main()測(cè)試。#include#includehpoint.hvoid main(void) point p1; p1.set_point(20,30); coutx=p1.read_x()endl; cout

18、y=p1.read_y()endl; p1.move(5,5); coutx=p1.read_x()endl; couty=p1.read_y()endl;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院21第一節(jié) 類和對(duì)象的基本概念3、類的測(cè)試#includei第一節(jié) 類和對(duì)象的基本概念說(shuō)明通常,當(dāng)成員函數(shù)代碼量較大時(shí),在類外定義成員函數(shù)。在定義成員函數(shù)以前一定要加上類名,類名與函數(shù)名間一定要用“:”;成員函數(shù)中,應(yīng)給出形參名,當(dāng)無(wú)形參時(shí),通常應(yīng)加上void;成員函數(shù)的返回類型,與函數(shù)原型中的返回類型必須相同。成員函數(shù)與普通函數(shù)一樣,可以設(shè)置參數(shù)的默認(rèn)值面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院22第一節(jié) 類和對(duì)

19、象的基本概念說(shuō)明面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工第一節(jié) 類和對(duì)象的基本概念 在類內(nèi)部定義:將成員函數(shù)定義為內(nèi)置函數(shù)1、隱式定義:直接將函數(shù)直接定義在類的內(nèi)部。如:class point private : float x,y; public : void set_point(float a,float b) x=a ; y=b; float read_x( ) return x; float read_y( ) return y; void move (float a,float b) x+=a;y+=b; ;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院23第一節(jié) 類和對(duì)象的基本概念 在類內(nèi)部定義:將成員函

20、數(shù)定第一節(jié) 類和對(duì)象的基本概念2、顯式定義顯示定義是指在定義內(nèi)置函數(shù)時(shí),仍將函數(shù)放在類定義體之外,但為了使之能起到內(nèi)置函數(shù)的作用,在函數(shù)定義前加上inline。如:面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院24第一節(jié) 類和對(duì)象的基本概念2、顯式定義面向?qū)ο蟪绦蛟O(shè)計(jì)信息第一節(jié) 類和對(duì)象的基本概念class point private: float x,y; public:void set_point(float a,float b);float read_x(void);float read_y(void);void move(float a,float b);inline void point:set

21、_point(float a,float b) x=a ; y=b; inline float point:read_x(void) return x;inline float point:read_y(void) return y;inline void point:move (float a,float b) x+=a;y+=b;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院25第一節(jié) 類和對(duì)象的基本概念class point面向?qū)ο蟪痰谝还?jié) 類和對(duì)象的基本概念四、對(duì)象的定義及引用 類與對(duì)象的關(guān)系1、面向?qū)ο蟪绦蛟O(shè)計(jì)概念(第一章)類是具有相同性質(zhì)和功能的對(duì)象的抽象對(duì)象是類的實(shí)例。2、C+面向?qū)ο蟪绦蛟O(shè)

22、計(jì)語(yǔ)言類是將具有相同數(shù)據(jù)成員、成員函數(shù)的操作對(duì)象的概括(或抽象)是對(duì)象的模板。對(duì)象是類的實(shí)例(具體化)類變量。面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院26第一節(jié) 類和對(duì)象的基本概念四、對(duì)象的定義及引用面向?qū)ο蟪绦虻谝还?jié) 類和對(duì)象的基本概念 對(duì)象的定義:與定義結(jié)構(gòu)體變量相同1、在聲明(定義)類的同時(shí)定義對(duì)象(類變量)如:class point private : float x,y; public : void setpoint(float a,float b); float getx(void); float get y(void ); op1,op2;但通常不采用此種方法為什么?類的定義通常是獨(dú)立

23、的,直接定義對(duì)象為全局對(duì)象面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院27第一節(jié) 類和對(duì)象的基本概念 對(duì)象的定義:與定義結(jié)構(gòu)體變第一節(jié) 類和對(duì)象的基本概念2、先定義類再定義對(duì)象格式:類名 對(duì)象名表 如:point op1,op2; 說(shuō)明:在定義類時(shí),計(jì)算機(jī)并不給類分配存儲(chǔ)空間,只有定義了對(duì)象后,計(jì)算機(jī)才為對(duì)象分配存儲(chǔ)空間;在定義類時(shí)定義的對(duì)象為全局對(duì)象它并非在函數(shù)中定義;通常用第二種方法定義類對(duì)象定義為局部類對(duì)象。面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院28第一節(jié) 類和對(duì)象的基本概念2、先定義類再定義對(duì)象面向?qū)ο蟪痰谝还?jié) 類和對(duì)象的基本概念 對(duì)象的使用對(duì)象的使用與結(jié)構(gòu)體變量的使用相同。1、數(shù)據(jù)成員的使用格式:

24、對(duì)象名.數(shù)據(jù)成員名2、成員函數(shù)的使用格式:對(duì)象名.成員函數(shù)名(實(shí)參表)或:對(duì)象名.類名:成員函數(shù)名(實(shí)參表)例【3.5】用point類求任意二個(gè)點(diǎn)之間的距離。 分析 程序面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院29第一節(jié) 類和對(duì)象的基本概念 對(duì)象的使用面向?qū)ο蟪绦蛟O(shè)計(jì)第一節(jié) 類和對(duì)象的基本概念#include#include#includehpoint.hvoid main(void) point p1,p2; float x1,x2,y1,y2,dx,dy,s; coutx1;couty1; coutx2;couty2; p1.set_point(x1,y1); p2.set_point(x2,y

25、2); dx=p2.read_x()-p1.read_x(); dy=p2.read_y()-p1.read_y(); s=sqrt(dx*dx+dy*dy); cout兩點(diǎn)間的距離為:sendl;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院30第一節(jié) 類和對(duì)象的基本概念#include”;可以定義對(duì)象的引用對(duì)象。例【3.6】分析程序的運(yùn)行結(jié)果。面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院31第一節(jié) 類和對(duì)象的基本概念3、說(shuō)明面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)第一節(jié) 類和對(duì)象的基本概念#include#includehpoint.hvoid main(void) point p1,*p; point &p2=p1; p1.

26、set_point(20,30); coutx=p1.read_x(); cout y=p1.read_y()endl; coutx=p2.read_x(); cout y=p2.read_y()endl; p2.move(5,5); p=&p1; coutx=read_x(); cout y=read_y()endl;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院32第一節(jié) 類和對(duì)象的基本概念#includeiostrea第一節(jié) 類和對(duì)象的基本概念 對(duì)象賦值語(yǔ)句 對(duì)象賦值:用賦值表達(dá)式將一個(gè)對(duì)象賦值給另一個(gè)變量。 對(duì)象賦值的作用:是將“=”右邊對(duì)象中的成員逐一賦值左邊的對(duì)象亦稱為對(duì)象的拷貝。說(shuō)明:在使用

27、對(duì)象賦值語(yǔ)句時(shí),兩個(gè)對(duì)象必須是相同的類;對(duì)象賦值后,二個(gè)對(duì)象仍是分離的,當(dāng)改變某一對(duì)象成員的值時(shí),另一對(duì)象不會(huì)因此而改變;對(duì)象賦值是一種淺拷貝:在一般情況下,對(duì)象賦值是成功的,但當(dāng)類中存在指針時(shí),可能會(huì)產(chǎn)生錯(cuò)誤。例【3.7】分析程序的運(yùn)行結(jié)果。面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院33第一節(jié) 類和對(duì)象的基本概念 對(duì)象賦值語(yǔ)句面向?qū)ο蟪绦蛟O(shè)第一節(jié) 類和對(duì)象的基本概念#include#includehpoint.hvoid main(void) point p1,p2; p1.set_point(20,30); p2=p1; coutp1: x=p1.read_x(); cout y=p1.read_

28、y()endl; coutp2: x=p2.read_x(); cout y=p2.read_y()endl; p1.move(5,5); coutp1: x=p1.read_x(); cout y=p1.read_y()endl; coutp2: x=p2.read_x(); cout y=p2.read_y()endl; 面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院34第一節(jié) 類和對(duì)象的基本概念#includeiostrea第一節(jié) 類和對(duì)象的基本概念四、類的作用域1、類的作用域:是指在類定義時(shí)“”與“”之間所形成的作用域。2、說(shuō)明:一個(gè)類的所有成員都在該類的作用域內(nèi);在類的內(nèi)部,成員函數(shù)可以不受限制

29、地使用所有數(shù)據(jù)成員(直呼其名)或成員函數(shù);在類的作用域外,只能引用類的公有成員(通常為成員函數(shù)),不能引用私有成員私有成員只能通過(guò)公有成員訪問。面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院35第一節(jié) 類和對(duì)象的基本概念四、類的作用域面向?qū)ο蟪绦蛟O(shè)計(jì)信第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)在定義一個(gè)類對(duì)象時(shí),計(jì)算機(jī)將給該對(duì)象分配相應(yīng)的存儲(chǔ)單元,同時(shí)進(jìn)行必要的初始化由構(gòu)造函數(shù)完成用戶提供或由系統(tǒng)提供。當(dāng)撤銷類對(duì)象時(shí),通常應(yīng)釋放內(nèi)存空間,并做一些收尾工作由析構(gòu)函數(shù)完成由用戶定義或系統(tǒng)提供。一、構(gòu)造函數(shù) 構(gòu)造函數(shù)的概念 觀察Date類的成員函數(shù)void set_date(int y=2000,int m=1,i

30、nt d=1)year=y;month=m;day=d;作用是為私有數(shù)據(jù)成員year、month、day賦值即:通過(guò)調(diào)用對(duì)象成員函數(shù)為對(duì)象的數(shù)據(jù)成員賦值;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院36第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)在定義一個(gè)類對(duì)象時(shí)第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)觀察oint類的成員函數(shù)void set_point(float a,float b) x=a ; y=b; 該函數(shù)的作用是為私有數(shù)據(jù)成員x、y賦值即:通過(guò)調(diào)用對(duì)象成員函數(shù)為對(duì)象的數(shù)據(jù)成員賦值;結(jié)論:通常每個(gè)類都應(yīng)至少提供一個(gè)函數(shù)為類中的數(shù)據(jù)成員賦值。問題:基本類型的變量可以在定義時(shí)賦初值,定義對(duì)象時(shí)是否可以賦初

31、值即:在定義對(duì)象時(shí)直接給數(shù)據(jù)成員賦初值?面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院37第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)觀察oint類的第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)解決辦法:將上述函數(shù)分別改為以下形式即可:Date類: Date(int y=2000,int m=1,int d=1) year=y;month=m;day=d;在定義類時(shí)可直接給Date對(duì)象賦初值。如:Date da1(2004,5,1);Point類:Point(float a,float b) x=a ; y=b; 在定義類時(shí)可直接給Date對(duì)象賦初值。如:Point p1(10.0,15.5);即函數(shù)名與類名相同(無(wú)

32、返回值類型)構(gòu)造函數(shù)。面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院38第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)解決辦法:將上述函第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)例【3.】將例【3.】用構(gòu)造函數(shù)實(shí)現(xiàn)。、類的定義(保存在hdate.h文件中):面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院39第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)例【3.】將例【第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)class Date private: int year,month,day; public:Date(int y=2000,int m=1,int d=1)year=y;month=m;day=d;int isleapyear(voi

33、d);void printdate(void)coutyear-month-dayendl;int Date:isleapyear(void) int p; p=(year%4=0&year%100!=0)|(year%400=0); return p;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院40第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)class Dat第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)、類的測(cè)試(主函數(shù))#include#include hdate.h void main(void) Date da1 (2004,5,1),da2(2006,10,1); da1.printdate(); da2

34、.printdate(); cout2004 year ; if(da1.isleapyear()coutis a leap year.endl; elsecoutis not a leap year.endl; cout2006 year ; if(da2.isleapyear()coutis a leap year.endl; elsecoutis not a leap year.endl;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院41第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)、類的測(cè)試(主函第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù) 構(gòu)造函數(shù)的定義格式:類名(形參表);性質(zhì):構(gòu)造函數(shù)的名字必須與類名相同

35、;構(gòu)造函數(shù)的形參可以是任意數(shù)據(jù)類型,但不能有返回值類型;定義對(duì)象時(shí),編譯系統(tǒng)會(huì)自動(dòng)調(diào)用構(gòu)造函數(shù)。例【3.9】定義對(duì)象時(shí)自動(dòng)調(diào)用構(gòu)造函數(shù)舉例運(yùn)行程序,觀察程序的輸出結(jié)果。面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院42第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù) 構(gòu)造函數(shù)的定義第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)#include class myclass public: myclass() cout constructing endl;void main() myclass A; main()函數(shù)中,只定義了一個(gè)對(duì)象,但直接調(diào)用了構(gòu)造函數(shù)構(gòu)造函數(shù)是在定義對(duì)象時(shí)自動(dòng)執(zhí)行的。面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院4

36、3第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)#include 第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù) 構(gòu)造函數(shù)的調(diào)用 構(gòu)造函數(shù)的調(diào)用是在定義對(duì)象時(shí)調(diào)用的。格式:類名 對(duì)象名(實(shí)參表) 或:類名 對(duì)象名=構(gòu)造函數(shù)名(實(shí)參表)例【3.10】用構(gòu)造函數(shù)實(shí)現(xiàn)對(duì)復(fù)數(shù)類(complex)對(duì)象的初始化。1、分析2、類的定義 定義復(fù)數(shù)類complex并將其存入hcomplex.h中面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院44第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù) 構(gòu)造函數(shù)的調(diào)第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)class complex private: double real; double imag; publi

37、c: complex(double r,double i) real=r;imag=i; double realcomplex(void) return real; double imagcomplex(void) return imag; double abscomplex(void) double t; t=sqrt(real*real+imag*imag); return t; ;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院45第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)class com第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)#include #include #include hcomplex.hvo

38、id main(void) complex A(3.0,4.0); cout real of complex A=A.realcomplex(); coutendl; cout imag of complex A=A.imagcomplex(); coutendl; cout abs of complex A=A.abscomplex(); coutendl;3、 測(cè)試:在main( )函數(shù)定義complex對(duì)象并初始化面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院46第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)#include 第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)#include #include #inc

39、lude hcomplex.hvoid main(void) complex A= complex(3.0,4.0); cout real of complex A=A.realcomplex(); coutendl; cout imag of complex A=A.imagcomplex(); coutendl; cout abs of complex A=A.abscomplex(); coutendl;可將其改為:面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院47第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)#include 第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù) 說(shuō)明構(gòu)造函數(shù)必須與類同名;構(gòu)造函數(shù)沒有返

40、回值;但構(gòu)造函數(shù)前不能加void類型符(其他沒有返回值的成員函數(shù)必須加類型符void);在實(shí)際應(yīng)用中,在定義每個(gè)類時(shí)都應(yīng)定義一至多個(gè)構(gòu)造函數(shù)(重載),以對(duì)各數(shù)據(jù)成員進(jìn)行初始化;如果不給出構(gòu)造函數(shù),系統(tǒng)將自定義一個(gè)構(gòu)造函數(shù);構(gòu)造函數(shù)可以不帶任何參數(shù);構(gòu)造函數(shù)可以用初始化表對(duì)參數(shù)進(jìn)行初始化;如:面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院48第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù) 說(shuō)明面向?qū)ο蟮诙?jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)class A int i; char j; float f; public : A(int I,char J,float F) i=I;j=J;f=F; ;class A int

41、 i; char j;float f; public : A(int I,char J,float F):i(I),j(J),f(F) ;可改為:面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院49第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)class Acl第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)如果數(shù)據(jù)成員為數(shù)組,必須用賦值的方式。如: class A int i; char j; float f; char name20; public : A(int I,char J,float F,char N ):i(I),j(J),f(F) strcpy(name,N); ;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院50第二

42、節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)如果數(shù)據(jù)成員為數(shù)組第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)對(duì)于沒有定義構(gòu)造函數(shù)的類,其公有數(shù)據(jù)成員要以用初始值表進(jìn)行初始化。如:#include class myclasspublic : char name20; int no;void main(void) myclass a=chen,25; cout a.noendl;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院51第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)對(duì)于沒有定義構(gòu)造函第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)構(gòu)造函數(shù)不能單獨(dú)調(diào)用。如:complex A ;A= complex(3.0,4.0);構(gòu)造函

43、數(shù)錯(cuò)誤的調(diào)用方法。思考:構(gòu)造函數(shù)能否取代為對(duì)象提供值的函數(shù)(如:set_date( int y,int m,int d) ) ?二、缺省參數(shù)的構(gòu)造函數(shù)在實(shí)際應(yīng)用中,有些構(gòu)造函數(shù)的參數(shù)值通常是不變的,只是在一些特殊情況下才需改變其值可定義帶缺省參數(shù)的構(gòu)造函數(shù)。例【3.11】分析程序的輸出結(jié)果面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院52第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)構(gòu)造函數(shù)不能單獨(dú)調(diào)第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)#include #include class complex private: double real; double imag; public: complex(double

44、 r=0.0,double i=0.0) real=r;imag=i; double abscomplex() double t; t=sqrt(real*real+imag*imag); return t;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院53第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)#include 第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)void main() complex A(3.0,4.0); complex B(3.0); complex C; cout abs of complex A=A.abscomplex(); coutendl; cout abs of complex B=B

45、.abscomplex(); coutendl; cout abs of complex C=C.abscomplex(); coutendl;abs of complex A=5abs of complex B=3abs of complex C=0 面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院54第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)void main第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)三、析構(gòu)函數(shù) 析構(gòu)函數(shù)及作用1、析構(gòu)函數(shù)析構(gòu)函數(shù)也是一種特殊的成員函數(shù),執(zhí)行的是與構(gòu)造函數(shù)相反的操作通常用作執(zhí)行一些清理任務(wù)(如釋放對(duì)象所占用的內(nèi)存等)。2、析構(gòu)函數(shù)的特點(diǎn)析構(gòu)函數(shù)與構(gòu)造函數(shù)的名字相同,但在其前面加

46、上“”;析構(gòu)函數(shù)沒有參數(shù),也沒有返回值,不能重載一個(gè)類中只能有一個(gè)析構(gòu)函數(shù);當(dāng)拆銷對(duì)象時(shí),自動(dòng)調(diào)用析構(gòu)函數(shù)。面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院55第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)三、析構(gòu)函數(shù)面向?qū)Φ诙?jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)例【3.12】 先將“hcomplex.h”頭文件中的內(nèi)容改為以下程序,并以hhcomplex.h”存盤。面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院56第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)例【3.12】 面第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)class complex private: double real; double imag; public: comp

47、lex(double r,double i) real=r;imag=i;coutconstructing.endl; complex(void)coutdestructing.endl; double realcomplex()return real; double imagcomplex()return imag; double abscomplex() double t; t=sqrt(real*real+imag*imag); return t;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院57第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)class com第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)用以下主函

48、數(shù)測(cè)試析構(gòu)函數(shù)的調(diào)用:#include #include #includehhcomplex.hvoid main() complex A(3.0,4.0); cout abs of complex A= coutA.abscomplex()endl;結(jié)論:析構(gòu)函數(shù)是在對(duì)象撤銷時(shí)自動(dòng)調(diào)用的運(yùn)行程序的輸出結(jié)果為:constructingabs of complex A=5destructing面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院58第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)用以下主函數(shù)測(cè)試析第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù) 說(shuō)明每個(gè)類必須有一個(gè)析構(gòu)函數(shù),如果未定義析構(gòu)函數(shù),則系統(tǒng)自定義一個(gè)析構(gòu)函

49、數(shù);對(duì)于大多數(shù)類而言,缺省的析構(gòu)函數(shù)已夠用,但有時(shí)需進(jìn)行內(nèi)部處理,則需要顯示定義析構(gòu)函數(shù)。例【3.13】 顯示定義析構(gòu)函數(shù)舉例面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院59第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù) 說(shuō)明面向?qū)ο蟮诙?jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)#include#includeusing namespace std;class string_data private: char *str; public: string_data(char *s); string_data(void); char *get_info(void)return str;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院60

50、第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)#include第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)string_data:string_data(char *s) coutconstructing: 為字符串分配內(nèi)存; coutendl; str=new charstrlen(s)+1; strcpy(str,s);string_data: string_data(void) delete str; coutdestructing:釋放字符串占用內(nèi)存; coutendl;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院61第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)string_da第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函

51、數(shù)void main(void) string_data str1(teacher); coutstr1.get_info()endl;結(jié)論:當(dāng)在構(gòu)造函數(shù)中用new動(dòng)態(tài)分配內(nèi)存空間時(shí),應(yīng)顯式定義析構(gòu)函數(shù),用delete釋放已分配的內(nèi)存空間。面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院62第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)void main第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)四、重載構(gòu)造函數(shù)與一般的成員函數(shù)一樣,構(gòu)造函數(shù)也可以重載。如: class A public : A( void); A(int); A(int , char); A(float , char); 面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程

52、學(xué)院63第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)四、重載構(gòu)造函數(shù)面第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)在main( )函數(shù)中可分別調(diào)用:main( ) A x; A y(10); A z(10,z); A w(5.5,W); 例【3.14】分析下列程序,熟悉構(gòu)造函數(shù)的重載。面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院64第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)在main( )函第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)#include class timer private: int seconds; public: timer() seconds=0; timer(int i) seconds=i; tim

53、er(int min,int sec) seconds=min*60+sec; int gettime() return seconds;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院65第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)#include 第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)void main(void) timer a,b(10),c(1,10); coutseconds1=a.gettime()endl; coutseconds2=b.gettime()endl; coutseconds3=c.gettime()endl;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院66第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函

54、數(shù)void main第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)五、拷貝構(gòu)造函數(shù)(復(fù)制構(gòu)造函數(shù)) 什么是拷貝構(gòu)造函數(shù)例【3.15】分析程序的結(jié)果#include#includehpoint.hvoid main(void) point p1;p1.set_point(20,30); point p2=p1,p3(p1); coutp1: x=p1.read_x(); cout y=p1.read_y()endl; coutp2: x=p2.read_x(); cout y=p2.read_y()endl; coutp3: x=p3.read_x(); cout y=p3.read_y()endl;面

55、向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院67第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)五、拷貝構(gòu)造函數(shù)(第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)其中: p2=p1; point p3(p1); 對(duì)象的拷貝 可以把hpoint.h中的類定義改為如下形式(存放在hhpoint.h中):面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院68第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)其中:面向?qū)ο蟪绦虻诙?jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)class point private: float x,y; public:point(void) /無(wú)參構(gòu)造函數(shù)x=0;y=0; point(float a,float b) /構(gòu)造函數(shù)重載x=a

56、 ; y=b; point(const point &ob) /拷貝構(gòu)造函數(shù)x=ob.x;y=ob.y;void set_point(float a,float b);float read_x(void);float read_y(void);void move(float a,float b);面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院69第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)class poi第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)void point:set_point(float a,float b) x=a ; y=b; float point:read_x(void) return x;fl

57、oat point:read_y(void) return y;void point:move (float a,float b) x+=a;y+=b;其中:point(const point &ob) x=ob.x;y=ob.y; 拷貝構(gòu)造函數(shù)面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院70第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù)void poin第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù) 拷貝構(gòu)造函數(shù)的定義格式類名(const 類名 &對(duì)象名) 函數(shù)體 通常為數(shù)據(jù)成員拷貝 默認(rèn)拷貝構(gòu)造函數(shù)如果不定義拷貝構(gòu)造函數(shù),系統(tǒng)會(huì)自定義一個(gè)拷貝構(gòu)造函數(shù),實(shí)現(xiàn)對(duì)數(shù)據(jù)成員的拷貝。 說(shuō)明拷貝構(gòu)造函數(shù)無(wú)返回值,也不能有voi

58、d;通常不用單獨(dú)編寫拷貝構(gòu)造函數(shù),直接使用默認(rèn)拷貝構(gòu)造函數(shù);默認(rèn)拷貝構(gòu)造函數(shù)是一種淺拷貝當(dāng)在類中用new分配內(nèi)存空間時(shí),通常應(yīng)編制相應(yīng)的拷貝構(gòu)造函數(shù)。面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院71第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù) 拷貝構(gòu)造函數(shù)的第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù) 例【3.16】 調(diào)試程序(e316.cpp),熟悉顯式定義拷貝構(gòu)造函數(shù)方法。面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院72第二節(jié) 對(duì)象的初始化構(gòu)造函數(shù)與析構(gòu)函數(shù) 例【3.1第三節(jié) 對(duì)象數(shù)組、對(duì)象指針及對(duì)象引用一、對(duì)象數(shù)組可以定義對(duì)象數(shù)組處理多個(gè)對(duì)象例【3.17】利用hhpoint.h中的point類建立對(duì)象數(shù)組并分析程序的結(jié)

59、果。#include#includehhpoint.hvoid main(void) point p5; int i; for (i=0;i5;i+) pi.set_point(i+1,2*(i+1); for(i=0;i5;i+) coutpi.read_x() pi.read_y()endl;面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院73第三節(jié) 對(duì)象數(shù)組、對(duì)象指針及對(duì)象引用一、對(duì)象數(shù)組#incl第三節(jié) 對(duì)象數(shù)組、對(duì)象指針及對(duì)象引用可以用缺省參數(shù)構(gòu)造函數(shù)為對(duì)象數(shù)組賦初值。如:將上例改為:#include#includehhpoint.hvoid main(void) point p5; /自動(dòng)調(diào)用缺

60、省參數(shù)構(gòu)造函數(shù) int i; for(i=0;i5;i+) coutpi.read_x() pi.read_y()endl; for (i=0;i5;i+) pi.set_point(i+1,2*(i+1); for(i=0;i5;i+) coutpi.read_x() pi.read_y()公有成員例【3.18】分析程序的輸出結(jié)果面向?qū)ο蟪绦蛟O(shè)計(jì)信息科學(xué)與工程學(xué)院75第三節(jié) 對(duì)象數(shù)組、對(duì)象指針及對(duì)象引用二、對(duì)象指針面向?qū)ο蟪痰谌?jié) 對(duì)象數(shù)組、對(duì)象指針及對(duì)象引用#include#includehhpoint.hvoid main(void) point p1(5.5,12.0),p25,*p;

溫馨提示

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

評(píng)論

0/150

提交評(píng)論