面向?qū)ο蟪绦蛟O(shè)計重難點分析_第1頁
面向?qū)ο蟪绦蛟O(shè)計重難點分析_第2頁
面向?qū)ο蟪绦蛟O(shè)計重難點分析_第3頁
面向?qū)ο蟪绦蛟O(shè)計重難點分析_第4頁
面向?qū)ο蟪绦蛟O(shè)計重難點分析_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

面向?qū)ο蟪绦蛟O(shè)計重難點分析

C++程序設(shè)計教學中的教學重點與難點,主要包括變量的賦值方法、函數(shù)、數(shù)組、指針、引用、結(jié)構(gòu)、類、繼承等.

C++語言中變量賦值的幾種方法

變量賦值是C++語言中最基本的語句,是學好C++語言程序設(shè)計的基礎(chǔ),所以同學們必須要重點掌握。

一、簡單變量賦值

⑴語句格式:

變量=表達式;

⑵功能

1具有傳送數(shù)據(jù)的功能;

1具有計算的功能。

例:

#include

#definePI3.14159

voidMain()

(

floatr,s;

P=10;

s=PI*r*r;

coutvv"s="?S?ENDL;

}

運行結(jié)果:

s=314,159

說明:r=10語句把數(shù)據(jù)10傳送給變量r,s=PI*r*r語句是把PI*r*r進行計算得出結(jié)果314.159,并把此結(jié)果傳送給變量s。

二、變量賦初值

變量賦初值就是在定義變量時給變量賦值。如:

inta=3,b=4,c=5;(定義a、b、c均為整型變量,其值分別為3、4、5)

floatf=3.56;(定義f為單精度實型變量,其值為3.56)

三、多重賦值運算

格式:變量1=變量2=...=變量n=表達式

例:a=b=c=8/2;(a、b、c的值都為4)

a=5+(c=6)(c=6、a=ll)

a=(b=4)+(c=6)(a=10,b=4,c=6)

a=(b=10)/(c=2)(a=5,b=10,c=2)

四、自增、自減運算

1.自增運算:++

①.++i使用之前i的值加1

例:n=5;

i=3;

x=n+(++i)

運行后:1=4Ax=9

②.i++使用之后i的值加1

例:n=5;

i=3;

x=n+(i++)

運行后:1=4、x=8

2.自減運算:一

①i使用之前i的值減1

例:n=5;

i=3;

x=n+(—i)

運行后:1=2、x=7

②.i-使用之后i的值減1

例:n=5;

i=3;

x=n+(i-)

運行后:1=2、x=8

五、復合賦值運算

格式:<變量><運算符>=<表達式>

例:

a+=5等價于a=a+5

x*=y+10等價于x=x*(y+10)

x%=3等價于x=x%3

六、逗號運算符、逗號表達式

格式:表達式1米達式2,...,表達式n

功能:按照“從左到右”的順序,先計算表達式1,將其值代入表達式2,再計算表達式2,?最后計算表達式n,整個表達式的值等于最后表錨n的值。

例:

3+5,6+8這個表達式的值為14

a=3*5,a*4

先求解a=3*5,得a的值為15,然后求解a*4,得60,整個表達式的值為60。

a=3*5,a*4,a+5

先求解a=3*5,得a的值為15,然后求解a*4(但a的值沒有改變,仍然為15),再計算a+5得20,整個表達式的值為20。

x=(a=3,6*a)

x=a=3,6*a

上述第一個是賦值表達式,將一個逗號表達式的值賦給x,x的值等于18。第二個是逗號表達式,它包括?個賦值表達式和一個算術(shù)表達式,x的值為3。

函數(shù)

函數(shù)是構(gòu)成C++程序的重要單元,是模塊化程序設(shè)計中的基本模塊,也是實現(xiàn)傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計的重要語言機制。掌握好如何劃分程序模塊,用函

數(shù)實現(xiàn)它,是程序員的基本素質(zhì)。

main。函數(shù)是系統(tǒng)中最特殊的一個函數(shù),它是整個系統(tǒng)運行的第一個函數(shù)。

函數(shù)分為程序員自定義函數(shù)和系統(tǒng)提供的庫函數(shù)。庫函數(shù)的使用可以大大減輕程序員的負擔,提高工作效率和程序的正確性。

函數(shù)調(diào)用實現(xiàn)了函數(shù)之間的聯(lián)系。是程序得以運行起來的紐帶。理解函數(shù)調(diào)用的機制、參數(shù)傳遞的方式、函數(shù)返回信息的手段等,都是對學員的基本要

求。

重載實現(xiàn)了同名函數(shù)對于不同數(shù)據(jù)類型的不同操作,對于實現(xiàn)面向?qū)ο笏枷胗幸欢◣椭?/p>

函數(shù)原型一般放在頭文件中說明,作為一個公共的服務,提供給包含該頭文件的其他文件中的函數(shù)調(diào)用。

簡單數(shù)據(jù)類型、數(shù)組、指針、引用、結(jié)構(gòu)以及類的對象作為函數(shù)的參數(shù)和返回值的含義各有不同,需要仔細區(qū)分。在參數(shù)傳遞上,簡單數(shù)據(jù)類型和結(jié)構(gòu)

按值傳遞;數(shù)組是地址傳遞;指針間接實現(xiàn)了按地址傳遞;引用直接將形式參數(shù)和實在參數(shù)聯(lián)系在一起,使用同一吶存空間;類的實例一對象則通過對象

的拷貝構(gòu)造函數(shù)構(gòu)造一個臨時對象作為傳遞給函數(shù)的參數(shù)。結(jié)構(gòu)和類等復雜數(shù)據(jù)類型又可以借助于指針或引用來減少函數(shù)調(diào)用過程中的時間和空間消耗。

函數(shù)的返回值也有講究。數(shù)組不能作為函數(shù)的返回值。其他數(shù)據(jù)類型都可以。

函數(shù)指針不是很常用,但是在某些情形下非常有用。在需要時,要能夠利用這一語言特點。

一、自定義函數(shù)

函數(shù)一般包括:函數(shù)名和自變量

1.有參數(shù)函數(shù)

⑴格式

類型函數(shù)名(形式參數(shù)表)

說明部分

語句1

語句2

語句n

)

⑵功能

例1:設(shè)f(x)=x3+2x2-5x+l,求y=f(u)+f(v)

分析:

定義函數(shù):

floatf(floatx)

(

floatyy;

yy=x*x*x+2*x*x-5*x+l;

return(yy);

)

主函數(shù):

#include

floatf(float);

voidmain()

(

floatu,v,y;

cin?u?v;

y=f(u)+f(v);

cout?\ny=\n?Y?ENDL;

)

自定義函數(shù)可.以放在主函數(shù)的前面,也可以放在主函數(shù)的后面,一般情況下人們習慣上放在主函數(shù)的后面,但在主函數(shù)中必須進行聲明。

完整程序:

#include

floatf(float);〃函數(shù)聲明

voidmain()

floatu,v,y;

cin?u?v;

y=f(u)+f(v);

cout?\"y=\"?Y?ENDL;

)

floatf(floatx)

(

floatyy;

yy=x*x*x+2*x*x-5*x+1;

retuni(yy);

)

2.無參數(shù)函數(shù)

⑴格式

類型函數(shù)名()

說明部分

語句1

語句2

語句n

)

例2:

#include

voidprintstar1();

voidprintstar2();

voidmain()

printstarl();

printstar2();

printstarl();

)

voidprintstar1()

{

coutvv\"********************\"vvENDL,

)

voidprintstar2()

(

cout?\nHowdoyoudo\"?ENDL;

}

運行結(jié)果:

Howdoyoudo

二、函數(shù)的調(diào)用方式

1.函數(shù)語句

把函數(shù)調(diào)用作為一個語句。如例2。

2.函數(shù)表達式

函數(shù)出現(xiàn)在一個表達式中,這種表達式稱為函數(shù)表達式。如例1。

3.函數(shù)參數(shù)。

函數(shù)調(diào)用作為一個函數(shù)的參數(shù)。

程序:

#include

intmax();

voidmain()

{inta,b,c;

cin?a?b;

c=max(a,max(b,10));

cout?\nMax=\M?C?ENDL;

)

intmax(intxjnty)

{intz;

z=x>y?x:y;

return(z);

)

4.向函數(shù)傳遞數(shù)組

實參和形參的數(shù)據(jù)傳遞方式是值的傳遞,而在C++中數(shù)組不采用值的傳遞方式,因此當需要用數(shù)組作為參數(shù)向函數(shù)內(nèi)部傳遞數(shù)據(jù)時,系統(tǒng)把數(shù)組的地址傳

給了函數(shù),這樣對數(shù)組參數(shù)的操作就等于對實際外部數(shù)組變量的操作。

例:

#include

intsum(int|],int);

voidmain()

{intia[5]={2,3,6,8,10};

intsumofArray=sum(ia,5);

cout?\nsumofarray:\n?SUMOFARRAY?ENDL;

)

intsum(intarray[],intlen)

{intisum=0;

for(inti=0;i<LEN;I++)

isum+=array[i];

returnisum;

)

三、函數(shù)遞歸調(diào)用

函數(shù)的遞歸調(diào)用是指在調(diào)用一個函數(shù)的過程中又直接或間接調(diào)用了函數(shù)本身

>子程序1_a子程序2-a.....―?子程序11

特殊情況

―?子函數(shù)

例3:用遞歸方法求n!

分析:

設(shè):f(n)=n!

f(n-l)=(n-l)!

f(n)=n*f(n-l)

f(n-l)=(n-l)*f(n-2)

f(n-2)=(n-2)*f(n-3)

f(l)=l

公式:

f(n)=n*f(n-l)

程序:

#include

intf(int);

voidmain()

{intnl,y;

cin?nl;

y=f(m);

cout<<\ny=\"?Y?ENDL;

)

intf(intn)

{intff;

if(n==l)ff=l;

elseff=n*f(n-l);

return(ff);

}

執(zhí)行過程:

輸入:5

y=f(5)

=5*f(4)

=5*4*f(3)

=20*3*f(2)

=60*2*f(l)

=120*1

=120

四、內(nèi)聯(lián)函數(shù)

1.內(nèi)聯(lián)函數(shù)的意義

主要解決程序運行的效率。

程序:

#include

intmax(intjnt);

voidmain()

{inta,b,c;

cin?a?b;

c=max(a,b);

cout?\HMax=\n?C?ENDL;

)

intmax(intx,inty)

{intz;

z=x>y?x:y;

return(z);

}

2.內(nèi)聯(lián)函數(shù)的定義

定義內(nèi)聯(lián)函數(shù)的方法很簡單。只要在函數(shù)聲明和函數(shù)定義的前面加上關(guān)鍵字inline即可。其它與函數(shù)定義相同。

例如:

#include

inlineintmax(intent);

voidmain()

{inta,b,c;

cin?a?b;

c=max(a,b);

cout?\nMax=\n?C?ENDL;

)

inlineintmax(intx,inty)

{intz;

z=x>y?x:y;

return(z);

)

以下不是內(nèi)聯(lián)函數(shù)

#include

intmax(intjnt);〃沒有inline

voidmain()

{inta,b,c;

cin?a?b;

c=max(a,b);

cout?\nMax=\n?C?ENDL;

)

inlineintmax(intx,inty)

intz;

z=x>y?x:y;

return(z);

3.內(nèi)聯(lián)函數(shù)的限制

內(nèi)聯(lián)函數(shù)雖然具有普通函數(shù)的特性,但其處理方式與普通函數(shù)不同,它是將調(diào)用表達式用內(nèi)聯(lián)函數(shù)體來替換,若內(nèi)聯(lián)函數(shù)比較大,在程序中就會有多個程

序備份,反而會占用更多的內(nèi)存空間,這就失去了內(nèi)聯(lián)函數(shù)存在的實際意義。因此,C++對內(nèi)鏈函數(shù)的定義有專門限制。

⑴在內(nèi)聯(lián)函數(shù)內(nèi)部不允許使用循環(huán)語句和開關(guān)語句,否則系統(tǒng)將其視為普通函數(shù)。

⑵內(nèi)聯(lián)函數(shù)不能是遞歸函數(shù)。

⑶語句數(shù)盡可能少,一般不超過5行。

五、函數(shù)重載

所謂函數(shù)重我是指同一個函數(shù)名可以對應著多個函數(shù)的實現(xiàn)。例如,可以給函數(shù)名add()定義多個函數(shù)實現(xiàn),該函數(shù)的功能是求和,即求兩個操作數(shù)的

和。其中,一個函數(shù)是求兩個int型的和,另一個實現(xiàn)是求兩個浮點型數(shù)之和。每種實現(xiàn)都對應一個函數(shù)體,這些函數(shù)的名字相同,但是函數(shù)的參數(shù)的類

型不同。這就是函數(shù)重載的概念。

例4:求兩個操作數(shù)之和。

#include

intadd(int,int);

doubleadd(double,double);

voidmain()

{

cout?ADD(5,l0)?ENDL;

cout?ADD(5.0,10.5)?ENDL;

}

intadd(intx,inty)

{

returnx+y;

)

doubleadd(doublea,doubleb)

{returna+b;

輸出

15

15.5

數(shù)組

數(shù)組是一個簡單而又常用的數(shù)據(jù)結(jié)構(gòu),可以模擬現(xiàn)實世界中具有同一類型對象的聚集現(xiàn)象。在數(shù)學上也非常有用(如矩陣運算)。

字符數(shù)組(字符串)是程序設(shè)計中經(jīng)常用到的數(shù)據(jù)類型,C++專門有一個庫(string.h)來支持有關(guān)字符串的操作。字符串可以用來表示名字、地址等文字

性的信息。

數(shù)組與指針有著非常相似的地方,數(shù)組名本身就是一個指針,除了它不能作為一般變量使用。在程序設(shè)計中,經(jīng)常用指針指向動態(tài)分配的數(shù)組空間以減少

一般數(shù)組在空間上的不靈活。

指針數(shù)組中數(shù)組的每個元素都是指針,這種情況一般用于數(shù)組元素是字符串的情況。C++程序的命令行參數(shù)就是作為字符串數(shù)組傳遞給main。函數(shù)的。

指針

指針使得C++語言使用起來非常靈活,它是C++語言的難點,但也是C++程序產(chǎn)生錯誤的最大的源泉。在使用過程中,要注意以下幾點:

1所有指針在使用前需要確保已經(jīng)指向合法的空間

1在不指向任何空間時將指針賦值為NULL

指針與內(nèi)存空間的分配密切相關(guān)。程序中經(jīng)常利用new來動態(tài)申請內(nèi)存空間并賦給?個指針來實現(xiàn)內(nèi)存空間的動態(tài)分配。使用時,注意以下兩點:

1所有通過new申請的空間(賦值給了指針)在不再使用時一定要釋放。

1在對象析構(gòu)時釋放所有該對象申請的空間,在程序結(jié)束時釋放所有程序中申請的空間。

指針的掌握不太容易,要抓住關(guān)鍵。了解指針經(jīng)常使用的場合,就可以比較容易理解指針了。指針常用于以下情形:

1函數(shù)參數(shù)用指針作為函數(shù)參數(shù)有兩個好處:

⑴可以避免按值傳遞參數(shù)帶來的空間浪費;

⑵可以通過指針間接修改形式參數(shù)所指向的地址空間。

1字符串就是字符指針(和字符數(shù)組一樣),字符串非常常用。

1動態(tài)空間申請很多時候,要使用的內(nèi)存空間在設(shè)計程序無法知道(如需要用戶輸入),需要在運行過程中,通過new來動態(tài)申請空間,new返回的

就是指針。動態(tài)申請的空間可以是簡單數(shù)據(jù)類型,也可以是數(shù)組、結(jié)構(gòu)或是類等復雜數(shù)據(jù)類型。

1鏈表結(jié)構(gòu)指針通常和結(jié)構(gòu)一起使用,組成鏈表、樹、圖等各種復雜的數(shù)據(jù)結(jié)構(gòu)。這些結(jié)構(gòu)對于描述各種現(xiàn)實問題非常有用。

引用

引用最大的作用就是作為函數(shù)的參數(shù)與返回值。引用作為函數(shù)參數(shù),有以下好處:

1引用參數(shù)傳遞的就是實在參數(shù)本身,而不是實在參數(shù)的一個副本,這樣減少了建立副本的消耗。

1引用作為參數(shù)還可以作為函數(shù)返回值的一種有效途徑??梢酝ㄟ^將引用定義為是const引用來限制在函數(shù)中對引用所代表的實在參數(shù)做修改。

引用作為返回值,有以下好處:

1函數(shù)返回的是所返回的變量或?qū)ο蟊旧恚恍枰⑴R時的對象。這樣減少了程序運行的開銷;

1返回一個引用使得一個函數(shù)調(diào)用的表達式可以成為一個左值表達式,可以為其賦值。

引用的作用和指針類似,但是它擺脫了使用指針可能帶來的程序錯誤,也提高了程序的可讀性和可理解性。推薦在能使用引用的地方盡量不要用指針。

在函數(shù)中通過申請堆空間再通過指針或引用返回的方法不提倡使用,應通過定義類,借助于類的封裝機制來改善程序結(jié)構(gòu)。

結(jié)構(gòu)與鏈表

盡管在C++的定義中,結(jié)構(gòu)和類的使用基本上沒有區(qū)別,但是在實際應用中,它們還是各司其職。結(jié)構(gòu)用于描述只有一般的復合數(shù)據(jù)結(jié)構(gòu),而類則用于描

述具備數(shù)據(jù)和行為的復雜數(shù)據(jù)結(jié)構(gòu)。

結(jié)構(gòu)作為函數(shù)的參數(shù)和返回值可以增強函數(shù)的信息輸入輸出能力。

鏈表是結(jié)構(gòu)的重要應用之一。結(jié)構(gòu)與指針結(jié)合起來,具有強大的構(gòu)成復雜數(shù)據(jù)結(jié)構(gòu)的能力。結(jié)構(gòu)用于描述鏈表中的節(jié)點,指針則將這些節(jié)點“串”起來。鏈

表的操作在后續(xù)課程《數(shù)據(jù)結(jié)構(gòu)》中經(jīng)常用到。

類是實現(xiàn)C++面向?qū)ο蟪绦蛟O(shè)計的基礎(chǔ),理解類的含義、定義和使用方式是本課程的重中之重,前面學習的各個內(nèi)容都將融合到類定義的各個部分,都

是為類的講解而準備的:

一、類封裝了操作和數(shù)據(jù),用函數(shù)來實現(xiàn)類的操作成員,用各種數(shù)據(jù)類型表示類的數(shù)據(jù)成員;

二、一個純粹的面向?qū)ο蟮某绦蚓褪怯扇舾深惖亩x組成。構(gòu)成程序的各個文件就是用于定義各個類。頭文件就是類的定義文件。

三、類學習的難點有:

1首先是思想觀念的轉(zhuǎn)變。要從傳統(tǒng)的面向過程的思想中擺脫出來,用面向?qū)ο蟮挠^點來分析問題。要將程序看成就是由一個個對象組成的。程序設(shè)

計的過程就是設(shè)計這些類并設(shè)計如何以及何時產(chǎn)生這些類的對象的過程。

1成員的訪問控制。要理解訪問控制的含義:私有成員只能由類自一的成員函數(shù)訪問;保護成員只能由類自己的成員函數(shù)和其派生類的成員函數(shù)訪問;

公有函數(shù)可以通過類的實例一對象訪問。公有成員反映了類對象可以提供的服務或是對外呈現(xiàn)的行為,是對象可以發(fā)揮其作用的窗口。保護和私有成員的

目的有二:一是保護隱私,不對外公布類對象的內(nèi)部結(jié)構(gòu);二是使類的內(nèi)部實現(xiàn)獨立于對外的接口,外界只需要知道該類對象可以提供哪些服務并用它,

而不必要了解復雜的內(nèi)部實現(xiàn),減少了程序員的負擔,也便于代碼的維護,提高穩(wěn)定性。保護成員又為其派生類提供了可以訪問其部分具體細節(jié)的權(quán)利,

為派生類提供了定的開放空間。這三種訪問級別提供了靈活的成員訪問控制。

四、C++中類對象的定義和訪問對象成員的方法

我們知道,類型和變量之間存在著一定的聯(lián)系,類是模板,而變量則是這種具有這種模板的一個實體。同樣的有了“類”類型就有其對應的變量實體,這就

是對象。

對象是類的實例或?qū)嶓w,表面上看對象是某個“類”類型的變量,但對象又不是普通的變量,對象是一個數(shù)據(jù)和操作的封裝體。封裝的目的就是阻止非法的

訪問,因此對象實現(xiàn)了信息的隱藏,外部只能通過操作接口訪問對象數(shù)據(jù)。對象是屬于某個已知的類,因此必須先定義類,然后才能定義對象。

下面定義了一個Tdate類,用該類來說明類對象的定義和訪問對象成員的方法

classTdate

(

public:

voidsetdate(intm,intdjnty)

{month=m;day=d;year=y;}

intisle叩year?!ㄅ袛嗍欠耖c年

(

intz;

z=(year%4==0)&(year%100==0)ll(year%400==0);

returnz;

)

voidprint()〃輸出日期

cout?MONTH?<year?endl;

private:

intmonth;

intday;

intyear;

};

1.對象的定義格式

格式如下:

〈類名〉〈對象名表〉

其中,〈對象名表》中可以有一個或多個對象名,對象名用逗號間隔。對象可以是一般的對象名,也可以是指向?qū)ο蟮闹羔樏蛞妹?,也可以是?shù)組。

例如:下面定義了類Tdate的幾個對象

Tdatedatel,date2,Update,date[3],&rdate=datel;

這里datel和date2是普通類對象,pdate是一個指向?qū)ο蟮囊粋€指針變量,date|3]定義了三個數(shù)組變量,每個變量都是Tdate類型,rdate是對象date1的

一個引用,它是datel別名。

2.訪問對象成員

對象也有自己的成員,它就是該對象的類所定義的成員。即對象成員也有數(shù)據(jù)成員和成員函數(shù)兩種。

⑴訪問對象成員

(對象名〉.〈成員名〉

功能:用來訪問數(shù)據(jù)成員

或者

〈對象名〉.〈成員名〉(〈參數(shù)表〉)

功能:用來訪問成員函數(shù)

例:

#include

#include

voidmain()

{

intx,y,z;Tdatea;

cin?x?y?z;

a.setdate(x,y,z);

a.print();

if(a.isleapyear())

cout?\"年是閏年\"<<ENDL;

elsecout?\"年不是閏年\"?ENDL;

⑵用指針訪問對象成員

(對象指針名>-><成員名>(〈參數(shù)表〉)

功能:用來訪問成員函數(shù)

或者

(*〈對象指針名>).<成員名>(〈參數(shù)>)

功能:用來訪問成員函數(shù)

例:

#include

#include

voidmain()

intx,y,z;Tdate*a;

cin?x?y?z;

a->setdate(x,y,z);

a->print();

if(a->isleapyear())

coutvv\"是閏年VvvENDL;

elsecoutvv\"不是閏年V'vvENDL;

)

例:

#include

#include

voidmain()

intx,y,z;Tdate*a;

cin?x?y?z;

(*a).setdate(x,y,z);

(*a).print();

if((*a).isleapyear())

cout?\"是閏年\"<<ENDL;

elsecout<<\"不是閏年\"<<ENDL;

)

⑶用引用傳遞訪問對象成員

〈引用名〉.〈成員名〉

功能:用來訪問數(shù)據(jù)成員

或者

<引用名>.<成員名>(<參數(shù)表〉)

功能:用來訪問成員函數(shù)

例:

#include

#include

voidmain()

(

Tdatedate1,&rdate=date1;

datel.setdate(2,4,2(X)0);

rdate.print();

if(rdate.isleapyear())

cout?\"年是閏年\"?ENDL;

elsecout<<\"年不是閏年\"?ENDL;

)

輸出結(jié)果

2/4/2000年是閏年

五、對象初始化

對象的數(shù)據(jù)成員可以通過成員函數(shù)為其賦值。但在對象定義時如何進行對象初始化呢?

1.構(gòu)造函數(shù)和析構(gòu)函數(shù)

構(gòu)造函數(shù)和析構(gòu)函數(shù)是類體中說明的兩個特殊用途的成員函數(shù)。構(gòu)造函數(shù)的用途是在創(chuàng)建對象時使用給定的值將對象初始化。析構(gòu)函數(shù)的作用是用來釋放一個對象,在對象刪除前,

用它來做一些清理工作。

構(gòu)造函數(shù)與類同名,析構(gòu)函數(shù)同類名,但前面必須加~號。

下面重新定義一個日期類TDatel,并將其放在tdatel.h文件中。

classTDate1

{

public:

TDatel(inty,intm,intd);

-TDate1();

voidPrint();

private:

intyear,month,day;

);

TDate1::TDate1(inty,intm,intd)

year=y;

month=m;

day=d;

cout?wConstructorcalled.Wn";

)

TDatel::-TDatel()

(

cout?wDestructorcall.Wnn;

)

voidTDatel::Print()

{

cout?YEAR<<”vvMONTHvv"?DAY?ENDL;

}

說明:

⑴構(gòu)造函數(shù)和析構(gòu)函數(shù)都是成員函數(shù),可以在內(nèi)部定義也可以在外部定義。

⑵構(gòu)造函數(shù)和析構(gòu)函數(shù)都不需要指定類型,也不允許返回值。析構(gòu)函數(shù)不需要參數(shù)。

⑶構(gòu)造函數(shù)可以重載,析構(gòu)函數(shù)不允許重載

⑷在程序中不能隨意調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù),而只能由系統(tǒng)調(diào)用。在對象創(chuàng)建時系統(tǒng)調(diào)自動調(diào)用構(gòu)造函數(shù),在對象消亡前系統(tǒng)自動調(diào)用析構(gòu)函數(shù)。下面

兩種情況下系統(tǒng)自動調(diào)用析構(gòu)函數(shù):

1如果一個對象定義在函數(shù)體內(nèi),當這個函數(shù)結(jié)束時,該對象的析構(gòu)函數(shù)被自動調(diào)用。

1當一個對象是使用new運算符創(chuàng)建的,在使用delete運算符釋放它時,delete將會自動調(diào)用析構(gòu)函數(shù)。

例:分析下面程序的運行結(jié)果

#include

#include"tdatel.h"

voidmain()

(

TDate1day(l997,4,20),tom(l998,3,6);

〃定義時直接初始化,由構(gòu)造函數(shù)獲得實參的值

coutvv“todayis

day.Print();

cout?ntomrrowis

tomPrint();

)

運行結(jié)果:

Constructorcalled.

Constructorcalled

Todayis1997.4.20

tomonowis1998.3.6

Destructorcall.

Destructorcall.

2、構(gòu)造函數(shù)的執(zhí)行順序

例:看下面程序的運行結(jié)果

#include

classStudent

public:

Student()

(

cout?Mconstructingstudent.\\n,,;

semesHours=100;

gpa=80;

)

protected:

intsemesHours;

floatgpa;

};

classTeacher

public:

Teacher()

coutvv“constructingteacher.Wn”;

)

);

classTutorPair

{

public:

TutorPair()

(

cout?nconstructingtutorpair.Wnv;

)

protected:

Studentstudent1;

Teacherteacherl;

intnoMeeting;

);

voidmain()

{

TutorPairtp;

cout?

溫馨提示

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

評論

0/150

提交評論