c++程序設(shè)計(jì)教案_第1頁(yè)
c++程序設(shè)計(jì)教案_第2頁(yè)
c++程序設(shè)計(jì)教案_第3頁(yè)
c++程序設(shè)計(jì)教案_第4頁(yè)
c++程序設(shè)計(jì)教案_第5頁(yè)
已閱讀5頁(yè),還剩70頁(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)介

《C++程序設(shè)計(jì)》教案

海南軟件職業(yè)技術(shù)學(xué)院

HainanSoftwareProfessionInstitute

(2006-2007學(xué)年度第一學(xué)期)

教師姓名:季文天____________

系部:軟件工程系

授課專(zhuān)業(yè):軟件技術(shù)

授課班級(jí):05軟件技術(shù)3班

海南收件取業(yè)技術(shù)學(xué)院《C++程序設(shè)計(jì)》教案

目錄

課題01:VisualC++6.0開(kāi)發(fā)環(huán)境..................................................2

課題02:C++數(shù)據(jù)類(lèi)型、表達(dá)式、語(yǔ)句.............................................5

課題03:數(shù)組...................................................................7

課題04:結(jié)構(gòu)類(lèi)型..............................................................11

課題05:函數(shù)...................................................................13

課題06:函數(shù)參數(shù)...............................................................16

課題07:內(nèi)聯(lián)函數(shù)與遞歸函數(shù).....................................................19

課題08:函數(shù)重載..............................................................21

課題09:指針..................................................................23

課題10:指針與數(shù)組、字符串指針...............................................26

課題11:指針與函數(shù)............................................................28

課題12:指針與動(dòng)態(tài)分配內(nèi)存...................................................31

課題13:引用..................................................................33

課題14:類(lèi)與對(duì)象..............................................................36

課題15:類(lèi)的靜態(tài)成員及常量成員...............................................39

課題16:友元..................................................................43

課題17:運(yùn)算符重載...........................................................46

課題18:繼承與派生...........................................................49

課題19:派生關(guān)系中的二義性處理...............................................53

課題20:虛基類(lèi)................................................................56

課題21:多態(tài)性與虛函數(shù)........................................................59

課題22:模板..................................................................62

課題23:文件、流及C++的流類(lèi)庫(kù)...............................................66

課題24:插入與提取運(yùn)算符的重載...............................................69

課題25:磁盤(pán)文件I/O...........................................................70

海南收件職業(yè)技術(shù)學(xué)院《C++程序設(shè)計(jì)》教案

課題01:VisualC++6.0開(kāi)發(fā)環(huán)境

一、教學(xué)目標(biāo):

1.掌握VisualC++6。開(kāi)發(fā)工具的選單、工具欄、項(xiàng)目、工作區(qū)等概念

2.掌握使用VC編寫(xiě)控制臺(tái)應(yīng)用程序

3.掌握使用VC進(jìn)行程序調(diào)試

二、教學(xué)重點(diǎn):

1、掌握VisualC++6.0開(kāi)發(fā)工具的選單、工具欄、項(xiàng)目、工作區(qū)等概念

三、教學(xué)難點(diǎn):

1、使用VC編寫(xiě)控制臺(tái)應(yīng)用程序。

2、使用VC進(jìn)行程序調(diào)試

四、課時(shí)安排:

2節(jié)課

五、教具準(zhǔn)備:

多媒體教室

六、教學(xué)方法:

講授

七、教學(xué)過(guò)程:

(一)、復(fù)習(xí)導(dǎo)入

VisualC++是Microsoft公司推出的目前使用極為廣泛的基于Windows平臺(tái)的

可視化開(kāi)發(fā)環(huán)境。VisualC++6.0是在以往版本不斷更新的基礎(chǔ)上形成的,由于

其功能強(qiáng)大、靈活性好、完全可擴(kuò)展以及具有強(qiáng)有力的Internet支持,在各種C++

語(yǔ)言開(kāi)發(fā)工具中脫穎而出,成為目前最為流行的C++語(yǔ)言集成開(kāi)發(fā)環(huán)境。

(二)、講授新課

1、開(kāi)發(fā)環(huán)境概述

遜:板書(shū)或幻燈片演示下圖

2

海南收件職業(yè)技術(shù)學(xué)院《C++程序設(shè)計(jì)》教案

顧:VisualC++6。開(kāi)發(fā)環(huán)境包括:

★標(biāo)題欄

★工具欄

★選單

★項(xiàng)目工作區(qū)窗口

★輸出窗口

★狀態(tài)欄

★文檔窗

依次介紹各項(xiàng)功能,詳細(xì)介紹選單、工具欄、項(xiàng)目工作區(qū)。

2、簡(jiǎn)單的控制臺(tái)應(yīng)用程序

使用Appwinzard創(chuàng)建一個(gè)控制臺(tái)應(yīng)用程序,使學(xué)生理解“工程”概念,熟

悉項(xiàng)目的程序框架,以及如何添加程序代碼、編譯、運(yùn)行。

以下面程序?yàn)槔?,講述如何建立控制臺(tái)應(yīng)用程序:

【例Ex_Hello]

#include<stdafx.h>

intmain(intargc,char*argv|])

(

cout?vHelloworld”;

return0;

【運(yùn)行結(jié)果工

3

海南收件職業(yè)技術(shù)學(xué)院《C++程序設(shè)計(jì)》教案

京*D:\Teaching\VC\Ix_Hello\Debug\Ix_Hello.exe*,1□1x|

HelloworldPressanykeytocontinue.

【例Ex_Hello]利用投影演示P18例Ex_HellOo

3、程序調(diào)成

在軟件開(kāi)發(fā)過(guò)程中,大部分的工作往往體現(xiàn)在程序的調(diào)試上。調(diào)試一般按這

樣的步驟進(jìn)行:

“修正語(yǔ)法錯(cuò)誤一設(shè)置斷點(diǎn)一啟用調(diào)試器一控制程序運(yùn)行一查看和修改變

量的值”

★修正語(yǔ)法錯(cuò)誤

調(diào)試最初的任務(wù)主要是修正一些語(yǔ)法錯(cuò)誤,比如:

■未定義或不合法的標(biāo)識(shí)符

■數(shù)據(jù)類(lèi)型或參數(shù)類(lèi)型及個(gè)數(shù)不匹配。

★設(shè)置斷點(diǎn)

用C++調(diào)試的斷點(diǎn)可以有以下類(lèi)型:

■為之?dāng)帱c(diǎn)

■數(shù)據(jù)斷點(diǎn)

■條件斷點(diǎn)

★啟用調(diào)試器

VisualC++6.0創(chuàng)建的項(xiàng)目,系統(tǒng)會(huì)自動(dòng)為項(xiàng)目創(chuàng)建Win32Debug版本的

默認(rèn)配置,選擇"build”選單一“startdebug”一“Go"、"stepinto"、“Runto

cursor”命令,就可以啟動(dòng)調(diào)試器了。

★控制程序運(yùn)行

可以通過(guò)"stepinto,stepover,stepout,runtocursor”控制程序運(yùn)行。

★查看和修改變量的值

在程序調(diào)試的時(shí)候VC會(huì)自動(dòng)顯示"Watch"和“Variables”兩個(gè)調(diào)試窗口,

通過(guò)這兩個(gè)窗口可以查看或修改當(dāng)前運(yùn)行程序的變量的值。

4

海南收件職業(yè)技術(shù)學(xué)院《C++程序設(shè)計(jì)》教案

課題02:C++數(shù)據(jù)類(lèi)型、表達(dá)式、語(yǔ)句

一、教學(xué)目標(biāo):

1.掌握C++程序結(jié)構(gòu)、基本組成

2.掌握C++的基本數(shù)據(jù)類(lèi)型、基本輸入/輸出

3.掌握C++運(yùn)算符、表達(dá)式

4.掌握C++基本語(yǔ)句

二、教學(xué)重點(diǎn):

LC++程序結(jié)構(gòu)、基本組成

2.C++基本數(shù)據(jù)類(lèi)型、輸入輸出

三、教學(xué)難點(diǎn):

LC++運(yùn)算符、表達(dá)式

2.C++基本語(yǔ)句

四、課時(shí)安排:

2節(jié)課

五、教具準(zhǔn)備:

多媒體教室

六、教學(xué)方法:

講授

七、教學(xué)過(guò)程:

(一')、復(fù)習(xí)導(dǎo)入

C++是在20世紀(jì)80年代初期由貝爾實(shí)驗(yàn)室設(shè)計(jì)的…種在C語(yǔ)言的基礎(chǔ)上增

加了面向?qū)ο笾С值恼Z(yǔ)言,她是目前應(yīng)用最為廣泛的編程語(yǔ)言。今天我們來(lái)學(xué)習(xí)

他的基本結(jié)構(gòu)、數(shù)據(jù)類(lèi)型、運(yùn)算符和表達(dá)式、基本語(yǔ)句。

(二)、講授新課

1、C++程序結(jié)構(gòu)

一個(gè)C++程序往往由預(yù)處理命令、語(yǔ)句、函數(shù)、變量和對(duì)象、輸入與輸出以

及注釋幾個(gè)部分組成。

★預(yù)處理命令

包括:宏定義命令、文件包含命令和條件編譯命令

★語(yǔ)句

語(yǔ)句是組成程序的基本單元

5

海南收件職業(yè)技術(shù)學(xué)院《C++程序設(shè)計(jì)》教案

★函數(shù)

一個(gè)C++程序是由若干個(gè)函數(shù)組成。一個(gè)程序中有且僅有一個(gè)主函數(shù)

main.

★變量和對(duì)象

C++是面向?qū)ο蟮恼Z(yǔ)言,所以在C++中相比C語(yǔ)言多了對(duì)象,她是“類(lèi)”

的實(shí)例

★輸入輸出

程序中總是少不了輸入和輸出語(yǔ)句。

★注釋

注釋可以提高程序的可讀性、幫助程序員理解,在程序運(yùn)行中不執(zhí)行。

在編寫(xiě)C++程序時(shí),還要注意程序的書(shū)寫(xiě)風(fēng)格,要注意縮進(jìn)和注釋。在編寫(xiě)

程序時(shí),標(biāo)識(shí)符應(yīng)該遵循以下原則:

★性

★性

★性

2、基本數(shù)據(jù)類(lèi)型

C++數(shù)據(jù)類(lèi)型分為基本數(shù)據(jù)類(lèi)型、派生類(lèi)型以及復(fù)合類(lèi)型3類(lèi)。基本數(shù)據(jù)類(lèi)

型包括:

★char

★int

★float

★double

以及上述類(lèi)型的變種,包括

★short

★long

★signed

★unsigned

★void

P29表2.1列出了C++的基本數(shù)據(jù)類(lèi)型

根據(jù)數(shù)據(jù)在程序中的可變性,我們將數(shù)據(jù)分為:

★常量

■整型常量

■浮點(diǎn)型常量

■字符常量

■字符串常量

■符號(hào)常量

★變量

■變量定義

■變量的初始化

要注意一個(gè)未初始化的變量不是沒(méi)有數(shù)值,而是取決于變量在系統(tǒng)中的存儲(chǔ)

形式,她可能是系統(tǒng)的默認(rèn)值或無(wú)效值。

3、基本輸入、輸出

C++中是通過(guò)標(biāo)準(zhǔn)的輸入流cin和標(biāo)準(zhǔn)輸出流cout來(lái)實(shí)現(xiàn)數(shù)據(jù)的輸入輸出。

6

海南收件取業(yè)技術(shù)學(xué)院《C++程序設(shè)計(jì)》教案

【舉例:Ex_CoutEnd]

[舉例:Ex_Algorism]

4、運(yùn)算符而表達(dá)式

C++用來(lái)記述運(yùn)算的符號(hào)稱(chēng)為運(yùn)算符,按照操作數(shù)的個(gè)數(shù)可以分為:

■單目運(yùn)算符

■雙目運(yùn)算符

■三目運(yùn)算符

根據(jù)其功能可以分為:

■算術(shù)運(yùn)算符

■賦值運(yùn)算符

■關(guān)系運(yùn)算符

■邏輯運(yùn)算符

■位運(yùn)算符

變量、常量通過(guò)一個(gè)或多個(gè)運(yùn)算符組合起來(lái)就構(gòu)成了表達(dá)式,比如有關(guān)系運(yùn)

算符構(gòu)成的表達(dá)式成為關(guān)系表達(dá)式。

5、基本語(yǔ)句

C++提供了如表達(dá)式語(yǔ)句、復(fù)合語(yǔ)句、選擇語(yǔ)句和循環(huán)語(yǔ)句等,滿足了結(jié)構(gòu)

化程序設(shè)計(jì)所需要的3中基本結(jié)構(gòu)。

■選擇語(yǔ)句

■條件語(yǔ)句ifelse

■開(kāi)關(guān)語(yǔ)句switch

■循環(huán)語(yǔ)句

■while

■do...while

■for

以上基本語(yǔ)句和C語(yǔ)言保持一致。

課題03:數(shù)組

一、教學(xué)目標(biāo):

L了解構(gòu)造類(lèi)型的意義

2.了解數(shù)組的概念

3.掌握一維數(shù)組、多維數(shù)組的定義

二、教學(xué)重點(diǎn):

1.一維數(shù)組的定義

2.數(shù)組的基本操作

三、教學(xué)難點(diǎn):

1.多維數(shù)組將維處理過(guò)程及多維數(shù)組的存儲(chǔ)

2.字符串?dāng)?shù)組的使用

海南收件取業(yè)技術(shù)學(xué)院《C++程序設(shè)計(jì)》教案

四、課時(shí)安排:

2節(jié)課

五、教具準(zhǔn)備:

多媒體教室

六、教學(xué)方法:

講授

七、教學(xué)過(guò)程:

(7、復(fù)習(xí)導(dǎo)入

在計(jì)算機(jī)所處理的數(shù)據(jù)中,最常見(jiàn)的,也是最需要由計(jì)算機(jī)高速處理的數(shù)據(jù)

是成批出現(xiàn)的同一類(lèi)型的數(shù)據(jù),C++語(yǔ)言中把這類(lèi)數(shù)據(jù)稱(chēng)為數(shù)組。例如:

?監(jiān)測(cè)系統(tǒng)在一段時(shí)間內(nèi)獲得的檢測(cè)、采樣值,可能是int型或float型數(shù)

據(jù)的數(shù)組;

?一個(gè)管理系統(tǒng)的數(shù)據(jù)庫(kù),可能是一系列結(jié)構(gòu)類(lèi)型(記錄)數(shù)據(jù)的序列;

?一幅電視圖像,可能是其每個(gè)像素的顏色及灰度值(整型數(shù))的二維陣列。

任何一種類(lèi)型的一批數(shù)據(jù),都可以組成數(shù)組,例如int型,float型,char型數(shù)

據(jù)可以組成數(shù)組;這些基本類(lèi)型的派生類(lèi)型(如long型,double型,unsignedchar

型)的數(shù)據(jù),枚舉、結(jié)構(gòu)、聯(lián)合類(lèi)型的數(shù)據(jù),以至由用戶或系統(tǒng)定義的類(lèi)(類(lèi)型)

的對(duì)象,都可以組成數(shù)組。

(二)、講授新課

1、一維數(shù)組

由n個(gè)同一類(lèi)型數(shù)據(jù)組成的一維序列,構(gòu)成一維數(shù)組,一維數(shù)組的下標(biāo)為0,

n-1o

1.一維數(shù)組的說(shuō)明

任何一種已知類(lèi)型數(shù)據(jù)都可說(shuō)明為數(shù)組,數(shù)組說(shuō)明的格式為:

<類(lèi)型名><數(shù)組名>[〈元素?cái)?shù)>]={<初值表>};

類(lèi)型名:可以是基本類(lèi)型名,基本類(lèi)型的派生類(lèi)型名,類(lèi)名,枚舉類(lèi)型名,

結(jié)構(gòu),聯(lián)合類(lèi)型名(也可以是枚舉、結(jié)構(gòu)聯(lián)合的類(lèi)型說(shuō)明)。關(guān)于指針數(shù)組將在下節(jié)說(shuō)

明。還有數(shù)組類(lèi)型的數(shù)組就是多維數(shù)組了,也將在下面介紹。

數(shù)組名:標(biāo)識(shí)符,數(shù)組名有兩個(gè)附加作用:

(1)是表示數(shù)組元素的下標(biāo)變量。如array[2]表示數(shù)組的第三個(gè)元素。

(2)它還是一個(gè)指向數(shù)組的首元指針。

元素?cái)?shù):一個(gè)正整數(shù),指出數(shù)組的元素個(gè)數(shù),或數(shù)組的大?。╯ize)o元素?cái)?shù)要用方括

號(hào)“口”括起來(lái)。方括號(hào)口不可缺省,元素?cái)?shù)則有時(shí)可缺省,這時(shí)必須賦初值,系

統(tǒng)按所賦的初值個(gè)數(shù)確定數(shù)組的大小。

初值表:可缺省。是由花括號(hào){,}括起來(lái)且用逗號(hào)','分開(kāi)的初始化常

8

海南收件取業(yè)技術(shù)學(xué)院《C++程序設(shè)計(jì)》教案

量值。例如:

intlist[100LA[10][10],B[]={4,3,2};

charch[26];

complexcom[4]={(3.2,4.7),(0.0,0.0));

其中,數(shù)組list[100]未賦初值。

數(shù)組A[10][10]為一個(gè)二維數(shù)組,未賦初值。

數(shù)組B□已賦初值,元素?cái)?shù)為3。

數(shù)組com[4]是用戶定義的complex類(lèi)型的數(shù)組,數(shù)組有4個(gè)元素,其中前

兩個(gè)元素已賦初值,初值分別為(3.2,4.7),(0.0,0.0)o

2.數(shù)組的操作——下標(biāo)變量

C++語(yǔ)言未提供對(duì)于數(shù)組整體進(jìn)行操作的運(yùn)算符和運(yùn)算。對(duì)于數(shù)組的操作是

通過(guò)對(duì)于其元素,即下標(biāo)變量進(jìn)行的。下標(biāo)變量的格式為:

(數(shù)組名>[<下標(biāo)>]

下標(biāo):整數(shù),或整型表達(dá)式,其取值范圍為0?11-1,昨數(shù)組元素總數(shù),例

如:

intA[4];

共有四個(gè)下標(biāo)變量:A[0],A[l],A[2],A[3]?

對(duì)于下標(biāo)變量可進(jìn)行下列操作。

(1)賦值??梢匀N方式進(jìn)行:

①初始化:

intA[4]={1,2,3};

相當(dāng)于一次為A[0],AE1],A[2]賦值為1,2,3。

②賦值語(yǔ)句:

A[3]=4*A[l];

相當(dāng)于把4*2=8賦值A(chǔ)[3]。

③輸入語(yǔ)句:

cin>>A[0];

for(inti=0;i<4;i++)cin>>A[i];

后者可通過(guò)鍵盤(pán)操作,為數(shù)組的四個(gè)元素依次賦值。

(2)?般運(yùn)算。

下標(biāo)變量可與同一類(lèi)型的一般變量一樣參加它所允許的運(yùn)算。如:

A[0]+=A[2]++;

cout?A[0]<<,z,Z<<AL1]*A[2];

維箋

p--vj"o

下標(biāo)也可以是一個(gè)表達(dá)式,如:

intA[4]={1,2,3,4};

A[3]=A[A[2]-A[1]]*4;

下標(biāo)表達(dá)式應(yīng)注意其值應(yīng)保持在0?nT范圍之內(nèi)。

2、多維數(shù)組

若干同一類(lèi)型的數(shù)據(jù)m歹如行的矩陣,則可稱(chēng)為二維數(shù)組,二維數(shù)組亦可視為一維

數(shù)組的數(shù)組。

9

海南收件取業(yè)技術(shù)學(xué)院《C++程序設(shè)計(jì)》教案

intA[m][n];

說(shuō)明了一個(gè)二維數(shù)組,它有mXn個(gè)元素,它也可以視為由n個(gè)一維數(shù)組intA[m]

組成的(一維)數(shù)組。類(lèi)似地,還可以說(shuō)明三維,四維數(shù)組,二維以上的數(shù)組統(tǒng)

稱(chēng)為多維數(shù)組。

L說(shuō)明和初始化

多維數(shù)組的說(shuō)明(以二維為例):

(類(lèi)型名X數(shù)組名〉K行數(shù)>][<列數(shù)>]

類(lèi)型名:同前節(jié)說(shuō)明。

數(shù)組名:同前節(jié)說(shuō)明。

行數(shù):正整數(shù)。

列數(shù):正整數(shù)。

例如:

charch[2][3];

該二維數(shù)組共有2行3歹U,元素個(gè)數(shù)為2*3=6。

在二維數(shù)組中,為數(shù)組賦初值的方式有:

inta[2][3]={{1,2,3},{4,5,6}};

亦可寫(xiě)為:

inta[2][3]={1,2,3,4,5,6};

二者效果是一樣的。系統(tǒng)將按逐行的次序順序?yàn)楦髟刭x值。其次序?yàn)椋?/p>

a[0][0],a[0]Ll],a[0][2],

⑴,a[l]⑵

對(duì)于三維以上的高維數(shù)組,其賦值方法是一樣的。

2.二維數(shù)組的操作

對(duì)于二維數(shù)組的操作,同樣是通過(guò)對(duì)其元素即下標(biāo)變量的操作來(lái)進(jìn)行的。

操作中應(yīng)注意:

(1)注意下標(biāo)表達(dá)式的取值范圍:

charA[m][n];

則下標(biāo)變量中i的值應(yīng)在0?m-1之間,j的值應(yīng)在0?n-1之間。

(2)當(dāng)只有一個(gè)下標(biāo)時(shí):

A[i]<0<=i<=n-1)

表示的是一個(gè)一維數(shù)組,其元素個(gè)數(shù)為n,這些元素可用下標(biāo)變量:

A[i][0],A[i]m,-.ALi][n-1]

來(lái)表示。

(3)更高維的數(shù)組,其定義和操作類(lèi)似。

3、數(shù)組與字符串

從表面上看,一個(gè)字符串就是一個(gè)字符數(shù)組,但在C++語(yǔ)言中,二者并不完全相同,

讀者在涉及到字符串處理時(shí),必須注意。字符串是一個(gè)以串尾符‘\0'結(jié)尾的字符類(lèi)型

數(shù)組。從下面的例子可看出其區(qū)別:

charstringl[7]="China”;

charstring2[]="China”;

charstring3[7]={'c','h','i','n','a');

charstring4[7]={'c','h','i','n','a,'\0'};

這說(shuō)明了四個(gè)字符型數(shù)組,它們是互不相同的。

10

海南收件取業(yè)技術(shù)學(xué)院《C++程序設(shè)計(jì)》教案

課題04:結(jié)構(gòu)類(lèi)型

一、教學(xué)目標(biāo):

L了解結(jié)構(gòu)類(lèi)型的意義

2.掌握結(jié)構(gòu)類(lèi)型的定義及應(yīng)用方法

3.掌握結(jié)構(gòu)數(shù)組的使用方法

二、教學(xué)重點(diǎn):

1.結(jié)構(gòu)類(lèi)型的定義

2.結(jié)構(gòu)類(lèi)型使用方法

三、教學(xué)難點(diǎn):

1.結(jié)構(gòu)數(shù)組的使用方法

四、課時(shí)安排:

2節(jié)課

五、教具準(zhǔn)備:

多媒體教室

六、教學(xué)方法:

講授

七、教學(xué)過(guò)程:

(一)、復(fù)習(xí)導(dǎo)入

實(shí)際應(yīng)用中往往需要把若干種不同類(lèi)型的數(shù)據(jù)組合為一個(gè)導(dǎo)出類(lèi)型,這就是

結(jié)構(gòu)類(lèi)型。數(shù)組是把若干相同類(lèi)型的數(shù)據(jù)放在一起,結(jié)構(gòu)則是把若干不同的數(shù)據(jù)

放在一起。例如,一個(gè)公司雇員的數(shù)據(jù)可能包括:

charname[20];

enum{male,female}sex;

floatsalary;

charphone[11];

那么我們?nèi)绾翁幚磉@樣的數(shù)據(jù)呢?下面就讓我們來(lái)學(xué)習(xí)一種新的構(gòu)造數(shù)據(jù)類(lèi)型

—結(jié)構(gòu)體。

(二)、講授新課

對(duì)公司雇員數(shù)據(jù)進(jìn)行處理或檢索時(shí),把它們組成結(jié)構(gòu)類(lèi)型會(huì)更方便:

structEmployee{

11

海南收件取業(yè)技術(shù)學(xué)院《C++程序設(shè)計(jì)》教案

charname[20];

enum{male,female}sex;

floatsalary;

charphone[11];

};

C++語(yǔ)言中的結(jié)構(gòu)是作為類(lèi)似于類(lèi)的概念處理的,這一點(diǎn)將在以后學(xué)習(xí)中說(shuō)明,在本章

結(jié)構(gòu)(以及聯(lián)合)類(lèi)型僅作為一種構(gòu)造數(shù)據(jù)類(lèi)型。

1、結(jié)構(gòu)類(lèi)型與結(jié)構(gòu)變量說(shuō)明

結(jié)構(gòu)類(lèi)型說(shuō)明的格式為:

struct〈類(lèi)型名》{〈成員表>};

類(lèi)型名:標(biāo)識(shí)符。

成員表:〈類(lèi)型>〈成員1>;<類(lèi)型>〈成員〈類(lèi)型>〈成員n>;

結(jié)構(gòu)類(lèi)型的變量說(shuō)明的格式為:

[struct](結(jié)構(gòu)類(lèi)型名〉〈變量名表》;

變量說(shuō)明中的關(guān)鍵字struct可以省略(C語(yǔ)言中不可),變量名表與一般

變量說(shuō)明一樣,其賦初始值的方法可從下面的例子中了解:

structEmployee{

charname[20];

enum{male,female}sex;

floatsalary;

charphone[11];

);//結(jié)構(gòu)類(lèi)型Employee的定義

structEmployeegyl,gy2;//變量gyl,gy2的說(shuō)明

Employeegy3,gy4={''JohnSmith,z,male,2107.5,02223501234};

//變量gy3,gy4(賦初值)的說(shuō)明

結(jié)構(gòu)類(lèi)型及其變量的說(shuō)明也可放在一起:

structEmployee{

charname[20];

enum{male,female}sex;

floatsalary;

charphone[11];

}gyl,gy2;

2、結(jié)構(gòu)變量的引用和賦值

一個(gè)結(jié)構(gòu)變量由若干分量組成,對(duì)結(jié)構(gòu)分量的存取由圓點(diǎn)運(yùn)算符實(shí)現(xiàn),例

如,在上例中,雇員gyl的姓名可表示為,其電話號(hào)碼可表示為

gyl.phoneo因此,為結(jié)構(gòu)變量賦值,除了在變量說(shuō)明中賦初值(如為gy4賦初

值)的方法外,還可以用賦值語(yǔ)句或輸入語(yǔ)句為結(jié)構(gòu)分量賦值的方法:

=''TomGreen";

gy3.sex=male;

cin>>gy3.salary;

cin>>gy3.phone;

無(wú)論采用哪種方法為結(jié)構(gòu)分量賦值,都必須保證類(lèi)型一致。

C++語(yǔ)言還允許直接對(duì)結(jié)構(gòu)變量賦值,下面的賦值語(yǔ)句也是允許的:

12

海南收件取業(yè)技術(shù)學(xué)院《C++程序設(shè)計(jì)》教案

gyl=gy4;

gy3=gy4;

一般,數(shù)組變量不能這樣直接賦值。

3、結(jié)構(gòu)數(shù)組

結(jié)構(gòu)類(lèi)型的數(shù)據(jù)也可以組成數(shù)組,稱(chēng)為結(jié)構(gòu)數(shù)組。結(jié)構(gòu)數(shù)組在許多實(shí)際應(yīng)用問(wèn)題

中的采用非常普遍,例如,通訊錄,學(xué)生成績(jī)單,商業(yè)銷(xiāo)售記錄,人事檔案,資

料登記表等等。下面的結(jié)構(gòu)數(shù)組是一個(gè)公司的雇員檔案:

structEmployee{

charname[20];

enum(male,female}sex;

floatsalary;

charphone[11];

);

Employeeefile[100];

數(shù)組的每?個(gè)分量是一個(gè)雇員的檔案數(shù)據(jù)。

課題05:函數(shù)

一、教學(xué)目標(biāo):

1.了解函數(shù)的作用、意義

2.掌握函數(shù)的說(shuō)明、調(diào)用、返回

3.掌握函數(shù)的使用方法

二、教學(xué)重點(diǎn):

1.函數(shù)的說(shuō)明

2.函數(shù)的調(diào)用

三、教學(xué)難點(diǎn):

1.函數(shù)返回

四、課時(shí)安排:

2節(jié)課

五、教具準(zhǔn)備:

多媒體教室

六、教學(xué)方法:

講授

七、教學(xué)過(guò)程:

13

海南收件取業(yè)技術(shù)學(xué)院《C++程序設(shè)計(jì)》教案

(一)、復(fù)習(xí)導(dǎo)入

函數(shù)概念是C++語(yǔ)言中最重要的概念之一,函數(shù)設(shè)計(jì)是程序設(shè)計(jì)的主要部分

或?qū)嵸|(zhì)部分。函數(shù)在C++程序設(shè)計(jì)中的意義體現(xiàn)在四個(gè)方面。

(1)從歷史上說(shuō),函數(shù)的思想來(lái)源于子程序,(如BASIC語(yǔ)言中的子程序),

把程序中反復(fù)出現(xiàn)的相同或相近的程序改寫(xiě)成子程序,可以大大縮短程序的長(zhǎng)

度。函數(shù)實(shí)際上是參數(shù)化的子程序。

(2)從結(jié)構(gòu)化程序設(shè)計(jì)(SP)的觀點(diǎn)來(lái)看,函數(shù)絕不僅僅是為了縮短程序長(zhǎng)度,

更重要的是通過(guò)函數(shù)設(shè)計(jì),可以把整個(gè)程序要完成的整體的復(fù)雜的計(jì)算任務(wù),分

解為一個(gè)個(gè)較小的,相對(duì)簡(jiǎn)單的子任務(wù)。這種模塊化的程序易設(shè)計(jì),易閱讀,易

調(diào)試,易維護(hù),較少出錯(cuò)。

(3)從運(yùn)算的角度說(shuō),函數(shù)就是C++語(yǔ)言提供的由用戶定義的運(yùn)算。運(yùn)算符是

系統(tǒng)提供的運(yùn)算,而函數(shù)是由用戶自己定義的運(yùn)算。

(4)作為面向?qū)ο蟪绦蛟O(shè)計(jì)(OOP)語(yǔ)言的C++,以類(lèi)為核心,類(lèi)由數(shù)據(jù)和方

法組成,方法就是對(duì)數(shù)據(jù)的運(yùn)算和處理,亦即類(lèi)的函數(shù)成員。故函數(shù)設(shè)計(jì)同樣是

OOP的重要組成部分。

(二)、講授新課

1、函數(shù)的說(shuō)明

C++程序允許兩種函數(shù)說(shuō)明語(yǔ)句的形式,我們把它們分別稱(chēng)為函數(shù)原型(或

函數(shù)聲明)和函數(shù)定義。

[1].函數(shù)原型

函數(shù)原型(亦稱(chēng)函數(shù)聲明)用來(lái)指出函數(shù)的名稱(chēng),類(lèi)型和參數(shù),其格式為:

[〈屬性說(shuō)明〉]〈類(lèi)型〉〈函數(shù)名〉(〈參數(shù)表〉);

例如:

intadd(inta,intb);

inlinevoidswap(float&s,float&t);

voidprint(char*);

屬傕舔明:可缺省,一般可以是下面的關(guān)鍵字之一:inline,static,virtual,

friend等。

inline表示該函數(shù)為內(nèi)聯(lián)函數(shù);

static表示該函數(shù)為靜態(tài)函數(shù);

virtual表示該函數(shù)為虛函數(shù);

friend表示該函數(shù)為某類(lèi)(class)的友元函數(shù)。

其含義的細(xì)節(jié)在后面有關(guān)章節(jié)介紹。

旗型:指函數(shù)的返回類(lèi)型。C++語(yǔ)言規(guī)定除了特別情形(main()函數(shù)和類(lèi)的構(gòu)造函數(shù),

析構(gòu)函數(shù))之外,所有函數(shù)都必須在說(shuō)明中指出返回類(lèi)型。一個(gè)函數(shù)可能有多個(gè)結(jié)果,

不一定都用返回值的方式輸出(還可通過(guò)全局變量,引用參數(shù)和指針等方式傳出)計(jì)算

結(jié)果,但函數(shù)調(diào)用作為一個(gè)表達(dá)式,該表達(dá)式的值則只能是函數(shù)的返回值。

上做名:一個(gè)標(biāo)識(shí)符。

14

海南收件取業(yè)技術(shù)學(xué)院《C++程序設(shè)計(jì)》教案

叁敢忐:它可能為空,void或〈類(lèi)型〉〈參數(shù)名〉,〈類(lèi)型〉〈參數(shù)名〉…的

形式。

例如:main()

print(void)

cuberoot(floatx)

add(inta,intb)

其中,函數(shù)原型中的參數(shù)表可忽略參數(shù)名,如:

iniadd(int,int)

voidswap(float&,float&)

它們與函數(shù)原型intadd(inta,intb);voidswap(float&s,float&t);是等價(jià)

的,事實(shí)上在編譯時(shí),函數(shù)原型中的參數(shù)名是被忽略的,后者的參數(shù)表中的符

號(hào)'&'表示該參數(shù)為引用型參數(shù),用以區(qū)別于一般的賦值型參數(shù),其用法在下面

介紹。

[2].S做定義

函數(shù)定義與函數(shù)原型的主要區(qū)別是它還包括函數(shù)體,其格式為:

[〈屬性說(shuō)明〉]〈類(lèi)型〉〈函數(shù)名〉(〈參數(shù)表〉)〈函數(shù)體〉

屬性說(shuō)明,返回類(lèi)型,函數(shù)名與函數(shù)原型一致,參數(shù)表中不可省略參數(shù)名。

晶政體:由{和}括起來(lái)的復(fù)合語(yǔ)句即程序塊。

program5_1的最后12行就是一個(gè)函數(shù)定義。從函數(shù)說(shuō)明語(yǔ)句的介紹,我們可以看到程

序中各種語(yǔ)句的分類(lèi)(說(shuō)明語(yǔ)句,表達(dá)式語(yǔ)句,控制語(yǔ)句和復(fù)合語(yǔ)句)并不是■■個(gè)簡(jiǎn)單

的劃分概念。函數(shù)定義本身是一種說(shuō)明語(yǔ)句,但其函數(shù)體則是一個(gè)復(fù)合語(yǔ)句。而在函數(shù)

體內(nèi)部又可能包含說(shuō)明語(yǔ)句,表達(dá)式語(yǔ)句,控制語(yǔ)句和復(fù)合語(yǔ)句。

總之,這種分類(lèi)和區(qū)分是明確的,但它們之間又有互相包含的關(guān)系。

2、函數(shù)調(diào)用

函數(shù)調(diào)用是已定義函數(shù)的一次實(shí)際運(yùn)行,(與某類(lèi)型的一個(gè)變量和后文中某類(lèi)

的一個(gè)對(duì)象類(lèi)似),函數(shù)調(diào)用是函數(shù)定義的一個(gè)“實(shí)例”。

函數(shù)說(shuō)明中的參數(shù)稱(chēng)為移式參敬(形參),函數(shù)調(diào)用中的參數(shù)稱(chēng)為實(shí)際參政(實(shí)參),

函數(shù)調(diào)用一般出現(xiàn)在表達(dá)式中或獨(dú)立形成一個(gè)函數(shù)調(diào)用語(yǔ)句,例如:

xr=cuberoot(-q/2+a)+cuberoot(-q/2-a);

swap(a,b);

函數(shù)調(diào)用的兩要素是函數(shù)名和實(shí)參表:

〈函數(shù)名>(<實(shí)參表))

實(shí)參表中的參數(shù)的類(lèi)型、個(gè)數(shù)、順序必須與函數(shù)說(shuō)明的參數(shù)表(形參表)相一致。

賦值型的實(shí)參可以是一個(gè)表達(dá)式。在上節(jié)program5_l的main。中兩次出現(xiàn)函數(shù)

cuberoot(x)調(diào)用,其具體的調(diào)用實(shí)施過(guò)程如下:

(1)根據(jù)調(diào)用語(yǔ)句中的函數(shù)名(cuberoot)在整個(gè)程序中搜索同名函數(shù)定義;

(2)對(duì)實(shí)參數(shù)的參數(shù)個(gè)數(shù),類(lèi)型,順序進(jìn)行核對(duì);判定是否與函數(shù)定義中的形參表對(duì)應(yīng)

一致,在上例中只有一個(gè)浮點(diǎn)型參數(shù);

(3)根據(jù)參數(shù)的類(lèi)型(值參數(shù)或引用參數(shù))進(jìn)行值參數(shù)的值傳遞或引用參數(shù)的換名,在

上例中即是要把實(shí)參表達(dá)式的值計(jì)算出來(lái)賦給形參x;

(4)運(yùn)行函數(shù)體代碼;

(5)返回調(diào)用點(diǎn),并返回所要求的函數(shù)值,即返回計(jì)算結(jié)果croot的值。

15

海南收件取業(yè)技術(shù)學(xué)院《C++程序設(shè)計(jì)》教案

3、函數(shù)的返回

函數(shù)的返回完成兩項(xiàng)任務(wù):

(1)把運(yùn)行控制從函數(shù)體返回到函數(shù)調(diào)用點(diǎn)。在上例中就是在計(jì)算cuberoot

(-q/2+a)之后再返回到語(yǔ)句xr=cuberoot()+cuberoot()的計(jì)算過(guò)程中。

(2)根據(jù)返回值要求,返回所需要的數(shù)據(jù)值。

函數(shù)的返回值有下面幾種情形:

1.饞?void],

如果函數(shù)無(wú)值返回,應(yīng)說(shuō)明為void類(lèi)型。例如:

voidprint(){cout?"HelloWorld!"};

voidshow(){cout?,,WonderfulC++!"};

函數(shù)僅需完成打印和顯示工作,不需返回任何數(shù)據(jù),這類(lèi)函數(shù)調(diào)用一般形成一

個(gè)函數(shù)調(diào)用語(yǔ)句。

未作類(lèi)型說(shuō)明的函數(shù),系統(tǒng)認(rèn)為是int類(lèi)型函數(shù),應(yīng)返回一整型值。

2.但?故缶費(fèi)/

最常見(jiàn)的函數(shù)是返回一個(gè)數(shù)值的函數(shù)。例如:

intadd(inta,intb);

floatcuberoot(floatx);

這類(lèi)函數(shù)的調(diào)用表達(dá)式可以出現(xiàn)在表達(dá)式語(yǔ)句中。

當(dāng)函數(shù)要返回的數(shù)值不止一個(gè)時(shí),情況比較復(fù)雜,一般它可以以結(jié)構(gòu)或類(lèi)的形式,也可

以以結(jié)構(gòu),數(shù)組或?qū)ο笾羔橆?lèi)型方式實(shí)現(xiàn),這樣的實(shí)例在后面的章節(jié)可以見(jiàn)到。

3.但國(guó)幻用費(fèi)"

值返回方式是C和Pascal語(yǔ)言中唯一的返回方式,C++語(yǔ)言提供的引用返回概

念是其特有的一種很強(qiáng)的功能,當(dāng)函數(shù)定義中把該函數(shù)說(shuō)明為某類(lèi)型的引用類(lèi)型

時(shí),該函數(shù)調(diào)用后返回的不單是值,而是包含返回值的變量(或?qū)ο?。由于返

回引用與引用類(lèi)型有關(guān),所以這樣的實(shí)例將在下節(jié)介紹。

課題06:函數(shù)參數(shù)

一、教學(xué)目標(biāo):

1.進(jìn)一步了解函數(shù)的應(yīng)用

2.了解函數(shù)參數(shù)

3.了解函數(shù)的值調(diào)用和引用調(diào)用

二、教學(xué)重點(diǎn):

1.函數(shù)參數(shù)形式

16

海南收件取業(yè)技術(shù)學(xué)院《C++程序設(shè)計(jì)》教案

三、教學(xué)難點(diǎn):

1.函數(shù)值調(diào)用和引用調(diào)用

四、課時(shí)安排:

2節(jié)課

五、教具準(zhǔn)備:

多媒體教室

六、教學(xué)方法:

講授

七、教學(xué)過(guò)程:

(一)、復(fù)習(xí)導(dǎo)入

函數(shù)的參數(shù)的設(shè)置和使用是函數(shù)設(shè)計(jì)中非常重要的部分。

(二)、講授新課

1、函數(shù)參數(shù)

C++語(yǔ)言允許函數(shù)無(wú)參,有一個(gè)或多個(gè)參數(shù),而且還支持不定個(gè)數(shù)參數(shù)的

函數(shù)。

(1)無(wú)參函數(shù):其函數(shù)說(shuō)明為下列形式:

voidprint(void);//輸出指定的數(shù)據(jù)

intgetx();//輸出變量x的值

用void或空表示無(wú)參。

(2)一個(gè)或多個(gè)參數(shù):

多數(shù)函數(shù)有一個(gè)或多個(gè)確定的個(gè)數(shù)、確定的類(lèi)型和順序的參數(shù),例如:

voidsort(intn,char*array){...};〃對(duì)n元整形數(shù)組array

〃進(jìn)行排序

floatmax(floata,floatb,floatc){...};

/*求三個(gè)實(shí)數(shù)a,b,c中最大者。*/

等等。定義中應(yīng)注意參數(shù)表的組成。因?yàn)樵贑++語(yǔ)言中,不同的函數(shù)是根據(jù)函

數(shù)名和參數(shù)表二者來(lái)區(qū)分的,只有二者完全一致才是同一函數(shù)。

(3)不定個(gè)數(shù)參數(shù):

有些應(yīng)用問(wèn)題中參數(shù)個(gè)數(shù)是變化的。例如設(shè)計(jì)一個(gè)電話計(jì)費(fèi)函數(shù),為了計(jì)

算通話費(fèi),不同的通話類(lèi)型(如市話,長(zhǎng)途,數(shù)據(jù)與通訊,BP機(jī)等)有不同數(shù)

目的參數(shù)。

處理參數(shù)個(gè)數(shù)不定的情形,可有不同的途徑。例如:

voidsort(intn,float*a);

這個(gè)函數(shù)可對(duì)n長(zhǎng)的浮點(diǎn)數(shù)組進(jìn)行排序,n是變化的;由于2是數(shù)組的首

元指針,因此這個(gè)函數(shù)實(shí)際上是可以進(jìn)行對(duì)任意多個(gè)浮點(diǎn)數(shù)排序的處理。

C++語(yǔ)言有的版本還提供一些庫(kù)函數(shù),支持處理形如:

voidabc(inti,...);

17

海南收件取業(yè)技術(shù)學(xué)院《C++程序設(shè)計(jì)》教案

的不定參數(shù)函數(shù)。

C++語(yǔ)言,允許參數(shù)表中包含無(wú)名參數(shù),主要是為了區(qū)分函數(shù),例如:

intf(inta,intb){returna+b*b;}

intf(inta,intb,int){returna*a+b;}

兩個(gè)不同的函數(shù)同名,但由于第二個(gè)函數(shù)包含一無(wú)名參數(shù),使得在調(diào)用時(shí)能夠

被區(qū)分,f(x,y)是第一個(gè)函數(shù)的調(diào)用,f(x,y,0)是第二個(gè)函數(shù)的調(diào)用。

C++程序還允許為函數(shù)定義可缺省參數(shù),這種函數(shù)調(diào)用時(shí)具有靈活性,

如:

intsqrsum(inta,intb,intc=0){

returna*a+b*b+c*c;

)

其中參數(shù)c為可缺省參數(shù),下面的調(diào)用方式都是合法的(x,y,z為int型變量):

sqrsum(x,y,z)

sqrsum(x+y,x—y)

sqrsum(x,y)

參數(shù)表中可有任意多個(gè)參數(shù)指定為可缺省參數(shù),但所有可缺省參數(shù)必須列

后。在調(diào)用該函數(shù)時(shí)一,一般不允許部分缺省,即要么省去全部缺省參數(shù),要么

一個(gè)也不省。

2、函數(shù)值調(diào)用和引用調(diào)用

C++語(yǔ)言在進(jìn)行函數(shù)調(diào)用時(shí),對(duì)參數(shù)的處理有兩種方式,賦值型和引用型,

即值調(diào)用方式和引用調(diào)用方式。前者是普通的形式,在C語(yǔ)言中只有這種方式;

C++語(yǔ)言中增加了引用調(diào)用形式,這種形式與pascal語(yǔ)言中的變量參數(shù)調(diào)用方

式相似。

1.破缶翎射方式

在執(zhí)行函數(shù)調(diào)用時(shí),在檢查函數(shù)名及參數(shù)表之后,首先為值參數(shù)分配內(nèi)存,

然后計(jì)算各對(duì)應(yīng)的實(shí)參表達(dá)式,并把計(jì)算的值賦給剛剛創(chuàng)建的參數(shù)變量,進(jìn)而

開(kāi)始函數(shù)體的運(yùn)行。

威缶超叁:在函數(shù)定義的參數(shù)中,除了被說(shuō)明為引用(&)的參數(shù)之外,

其余所有類(lèi)型的形參都屬于賦值形參。

凡是賦值形參,在函數(shù)的每次調(diào)用時(shí),都必須為每一個(gè)賦值形參創(chuàng)建一個(gè)

新的參數(shù)變量。

窕參忐化式:另一方面,函數(shù)調(diào)用語(yǔ)句中,與賦值形參相對(duì)應(yīng)的實(shí)參可以

是指定類(lèi)型的常量、變量或表達(dá)式。在執(zhí)行函數(shù)調(diào)用時(shí)應(yīng)把該表達(dá)式的值計(jì)算

出來(lái),作為初值賦給剛剛為賦值形參創(chuàng)建的參數(shù)變量。這是賦值調(diào)用方式名稱(chēng)

的由來(lái)。

2.引用側(cè)用方式

幻用移叁:函數(shù)定義的參數(shù)表中,名字前加上符號(hào)&的參數(shù)為引用形參。

例如:

voidswap(int&a,int&b){

18

海南軟件取業(yè)技術(shù)學(xué)院《C++程序段計(jì)》教案

inttemp=a;

a=b;

b=temp;

)

形參a,b為引用形參,這時(shí)其函數(shù)原型可寫(xiě)為:

voidswap(int&,int&);

引用形參在調(diào)用過(guò)程中的參數(shù)傳遞機(jī)制不同于賦值形參。其要點(diǎn)是:

(1)函數(shù)的調(diào)用語(yǔ)句中對(duì)應(yīng)于引用形參的實(shí)參必須是同一類(lèi)型的變量,非

變量的表達(dá)式則不允許。

(2)參數(shù)傳遞的內(nèi)容不是實(shí)參的值,而是地址,其實(shí)際的效果是令對(duì)應(yīng)的

引用形參在調(diào)用過(guò)程中,作為?個(gè)變量名指向作為實(shí)參的這個(gè)變量,與賦值形

參的不同在這里體現(xiàn)出來(lái),在引用調(diào)用過(guò)程中并不創(chuàng)建新的參數(shù)變量!

(3)在函數(shù)體程序塊的運(yùn)行中,引用形參的每次出現(xiàn),由于它現(xiàn)在已經(jīng)是

指向?qū)崊⒆兞?,因此相?dāng)于全用實(shí)參變量所代替。即起到了所謂的“換名”的

作用。

(4)在函數(shù)體程序運(yùn)行結(jié)束,控制轉(zhuǎn)回調(diào)用點(diǎn)時(shí),該引用形參與實(shí)參變量

的對(duì)應(yīng)關(guān)系也就終止了。但是在調(diào)用過(guò)程中對(duì)于這個(gè)實(shí)參變量的所有處理和操

作的結(jié)果,卻保留下來(lái)。這一點(diǎn)也是區(qū)別于賦值調(diào)用的。

課題07:內(nèi)聯(lián)函數(shù)與遞歸函數(shù)

一、教學(xué)目標(biāo):

1.進(jìn)一步掌握函數(shù)的應(yīng)用

2.了解內(nèi)聯(lián)函數(shù)

3.掌握遞歸函數(shù)的使用

二、教學(xué)重點(diǎn):

1.函數(shù)嵌套

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

三、教學(xué)難點(diǎn):

1.函數(shù)的遞歸調(diào)用

四、課時(shí)安排:

2節(jié)課

五、教具準(zhǔn)備:

多媒體教室

六、教學(xué)方法:

講授

19

海南收件取業(yè)技術(shù)學(xué)院《C++程序設(shè)計(jì)》教案

七、教學(xué)過(guò)程:

(一)、復(fù)習(xí)導(dǎo)入

(二)、講授新課

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

內(nèi)聯(lián)(inline)函數(shù)的設(shè)置是C++不同于C的特征之、

(1)在C++程序中符合下列條件的函數(shù):

①函數(shù)說(shuō)明前冠以“inline”關(guān)鍵字的函數(shù);

②類(lèi)內(nèi)定義的函數(shù)成員,將在第七章介紹。

(2)在編譯過(guò)程中,凡內(nèi)聯(lián)函數(shù),系統(tǒng)把它的執(zhí)行代碼插入到該函數(shù)的每個(gè)調(diào)用點(diǎn),

從而使程序執(zhí)行過(guò)程中,每次該函數(shù)調(diào)用時(shí)不需控制轉(zhuǎn)移,但該函數(shù)代碼可能有多個(gè)拷

貝出現(xiàn)在目標(biāo)程序中。也就是說(shuō),把多次調(diào)用的函數(shù)說(shuō)明為內(nèi)聯(lián)函數(shù),會(huì)使目標(biāo)程序占

用的空間加大,而運(yùn)行時(shí)間得到節(jié)省。

(3)為了優(yōu)化程序、提高程序的運(yùn)行效率,一般把函數(shù)體短小而又頻繁調(diào)用的函數(shù)說(shuō)

明為內(nèi)聯(lián)函數(shù)較好。

(4)利用編譯預(yù)處理的宏定義方式,也可以實(shí)現(xiàn)類(lèi)似于內(nèi)聯(lián)函數(shù)的功能。

不過(guò),內(nèi)聯(lián)函數(shù)的方式更為方便和可靠。例如,下面兒個(gè)內(nèi)聯(lián)函數(shù)定義可以用帶參數(shù)的

宏定義方式實(shí)現(xiàn):

inlineintMAX(inta,intb){if(a>b)returna;returnb;}

inlinefloatABS(floata){return(a>=0)?a:0-a;}

inlinefloatPERCENT(floata,floatb){return100.0*a/b;}

inlinevoidSWAP(inta,intb){intt;t=a;a=b;b=t;return;}

inlineboolISODD(intx){return(x%2==1)?1:0;}

對(duì)應(yīng)的宏定義為:

#defineMAX(a,b)((a>b)?a:b)//求較大者

#defineABS(a)((a>=0)?a:0-a)//求絕對(duì)值

#definePERCENT(a,b)(100.0*a/b)〃求百分比

#defineSWAP(t,a,b){intt=a;a=b;b=t;}//交換a,b的值

#defineISODD(x)((x%2==1)1:0)//判斷x是否為奇數(shù)

雖然這些帶參數(shù)的宏定義的功能與對(duì)應(yīng)的內(nèi)聯(lián)函數(shù)基本一致,但仍然是有差別

的,宏定義中的參數(shù)和計(jì)算結(jié)果沒(méi)有類(lèi)型說(shuō)明,編譯時(shí)不可能進(jìn)行類(lèi)型檢查,是

不安全的,更無(wú)法區(qū)分賦值參數(shù)和引用參數(shù),很容易出錯(cuò)。因此,C++語(yǔ)言的編

程中,當(dāng)某段計(jì)算短小而又經(jīng)常被重復(fù)時(shí);建議采用內(nèi)聯(lián)函數(shù),少用宏定義實(shí)現(xiàn)。

2、函數(shù)嵌套

一個(gè)函數(shù)的函數(shù)體中包含一個(gè)或多個(gè)函數(shù)調(diào)用語(yǔ)句,即稱(chēng)為函數(shù)嵌套。嵌套

的含義是,如果函數(shù)A要調(diào)用函數(shù)B,也就是說(shuō),函數(shù)A的定義要依賴(lài)于函數(shù)

B的定義。因此函數(shù)B的定義或函數(shù)B的原型必須出現(xiàn)在函數(shù)A的定義語(yǔ)句

之前。

為了保證返回后繼續(xù)正常運(yùn)行,函數(shù)調(diào)用過(guò)程開(kāi)始時(shí)需要做更多的事情:

1)建立被調(diào)用函數(shù)的??臻g;

20

海南收件取業(yè)技術(shù)學(xué)院《C++程序設(shè)計(jì)》教案

2)保存調(diào)用函數(shù)的運(yùn)行狀態(tài)和返回地址;

3)傳遞參數(shù);

4)把程序控制轉(zhuǎn)交給被調(diào)用函數(shù)。

3、備做的遞加

遞歸函數(shù)的設(shè)計(jì)在程序設(shè)計(jì)中占有重要的地位。

函數(shù)A在其函數(shù)體中直接包含它自己的調(diào)用語(yǔ)句,這種調(diào)用稱(chēng)為直接遞歸調(diào)用,

函數(shù)A稱(chēng)為(直接)遞歸函數(shù)。函數(shù)A在其函數(shù)體中間接地包含對(duì)它自己的調(diào)

用,例如A調(diào)用函數(shù)B,但函數(shù)B又調(diào)用函數(shù)A,則函數(shù)A稱(chēng)為(間接)遞歸

函數(shù)。下面是一個(gè)(直接)

遞歸函數(shù)的例子:

floatfac(intn){

if(n<2=return1;

returnfac(n-1)*n:

1

遞歸函數(shù)的實(shí)際計(jì)算過(guò)程與遞歸次序相反,例如,設(shè)n=4,1算fac(4)的遞歸次序是:fac(4)

一〉fac(3)->fac⑵一〉fac(l),而實(shí)際計(jì)算過(guò)程則正好相反:fac(1)=1,fac(2)=fac(1)*2=2,

fac(3)=fac(2)*3=6,fac(4)=fac(3)*4=24.

在一般情況下,應(yīng)注意:

(1)無(wú)論是直接遞歸還是間接遞歸都必須保證在有限次調(diào)用之后能夠結(jié)束。例如函數(shù)fac

中的參數(shù)n在遞歸調(diào)用中每次減1,總可達(dá)到<2的狀態(tài)而結(jié)束。

(2)函數(shù)調(diào)用時(shí)系統(tǒng)要付出時(shí)間和空間代價(jià),在環(huán)境條件相同的情形下,總是非遞歸程

序效率較高。

課題08:函數(shù)重載

一、教學(xué)目標(biāo):

1.了解函數(shù)重載的意義

2.掌握函數(shù)重載的條件

3.學(xué)會(huì)使用函數(shù)重載

二、教學(xué)重點(diǎn):

1.函數(shù)重載的條件

三、教學(xué)難點(diǎn):

1.函數(shù)重載的使用

四、課時(shí)安排:

2節(jié)課

五、教具準(zhǔn)備:

21

海南收件取業(yè)技術(shù)學(xué)院《C++程序設(shè)計(jì)》教案

多媒體教室

六、教學(xué)方法:

講授

七、教學(xué)過(guò)程:

(一)、復(fù)習(xí)導(dǎo)入

(二)、講授新課

函數(shù)重載實(shí)際上是函數(shù)名重載,即支持多個(gè)不同的函數(shù)采用同一名字。例如:

inlabs(intn){return(n<0?-n:n;}

floatabs(floatf){if(f<0)f=-f;returnf;)

doubleabs(doubled){if(d<0)retum-d;returnd;)

三個(gè)函數(shù)都是求絕對(duì)值,采用同一個(gè)函數(shù)名,更符合人們的習(xí)慣(這一點(diǎn)在C語(yǔ)

言和其它語(yǔ)言中是不允許的。它們規(guī)定,在同一個(gè)程序塊中一個(gè)名字只允許有一

種含義)。在程序中經(jīng)常出現(xiàn)這樣的情況:對(duì)若干種不同的數(shù)據(jù)類(lèi)型求和,雖然

數(shù)據(jù)本身差別很大(例如整數(shù)求和,向量求和,矩陣求和),具體的求和操作差

別也很大,但完成不同求和操作的函數(shù)卻可以取相同的名字(例如sum,add等)。

許多差別很大的打印函數(shù)可以都用名print,顯示函數(shù)可以都用display,從鍵盤(pán)

或文件獲取信息都稱(chēng)作get,發(fā)送稱(chēng)為send,接收稱(chēng)為receive等等。函數(shù)名的

重載并不是為了節(jié)省標(biāo)識(shí)符(標(biāo)識(shí)符的數(shù)量是足夠的),而是為了方便程序員的

使用,這一點(diǎn)很重要。

實(shí)現(xiàn)函數(shù)的重載必須滿足下列條件之一:

(1)參數(shù)表中對(duì)應(yīng)的參數(shù)類(lèi)型不同;

(2)參數(shù)表中參數(shù)個(gè)數(shù)不同;

(3)參數(shù)表中不同類(lèi)型參數(shù)的次序不同。

例如:

voidprint(int);//整型

voidprint(point);//類(lèi)point的對(duì)象

intsum(int,int);

intsum(int,int,int);

intget(intn,floata[]);

intget(intn,floata[],intn);

在定義同名函數(shù)時(shí)應(yīng)注意:

(1)返回類(lèi)型不能區(qū)分函數(shù),例如:

floatadd(intfloat);

intadd(intfloat);〃錯(cuò)誤

在調(diào)用時(shí)系統(tǒng)無(wú)法區(qū)分選擇對(duì)應(yīng)函數(shù)。

(2)采用引用參數(shù)不能區(qū)分函數(shù),例如:

voidprint(double);

voidprint(double&);〃錯(cuò)誤

22

海南軟件取業(yè)技術(shù)學(xué)院《C++程序段計(jì)》教案

voidprint(constdouble&);〃錯(cuò)誤

(3)有些派生基本類(lèi)型的參數(shù)雖然可以區(qū)分同名函數(shù),但在使用中必須注意,例如:

intabs(int);

unsignedintabs(unsignedint);

對(duì)這種函數(shù)的調(diào)用必須注意:

inta=3,b;

unsignedintc=5,d;

調(diào)用語(yǔ)句

b=abs(a);

d=abs(c);

b=abs(-3);

b=abs(3);

d=abs(3*a);

其中abs(3)因?qū)崊?既可以是int型,也可以u(píng)nsignedint型,故這里可能出現(xiàn)二義性。

(4)包含可缺省參數(shù)時(shí),可能造成二義性,例如:

intsum(inta,intb,intc=0);

intsum(inta,intb);

程序設(shè)計(jì)中應(yīng)避免這種情形出現(xiàn)。上面的二義性的情形是指系統(tǒng)面對(duì)某一函數(shù)調(diào)

用語(yǔ)句,有兩個(gè)或兩個(gè)以上同名函數(shù)與之匹配;而另一種情況下,由于數(shù)據(jù)類(lèi)型

之間的復(fù)雜轉(zhuǎn)換關(guān)系也可能造成

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論