版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 44876-2024外科植入物骨科植入物的清潔度通用要求
- 亞運(yùn)會(huì)應(yīng)急預(yù)案
- 肺性腦病的業(yè)務(wù)學(xué)習(xí)
- 移動(dòng)設(shè)備管理與安全
- 銀行述職報(bào)告2024年
- 皮膚科護(hù)士述職報(bào)告
- 高中生物人類(lèi)遺傳病試題
- 機(jī)器人安全培訓(xùn)
- 糖尿病飲食資料
- 社交渠道規(guī)劃
- 2024年江蘇地區(qū)“三新”供電服務(wù)公司招聘320人(第二批)高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
- 2024秋期國(guó)家開(kāi)放大學(xué)《可編程控制器應(yīng)用實(shí)訓(xùn)》一平臺(tái)在線形考(形成任務(wù)4)試題及答案
- 維修電工題庫(kù)(300道)
- 期中考試卷(試題)-2024-2025學(xué)年蘇教版二年級(jí)數(shù)學(xué)上冊(cè)
- 2023年江蘇省普通高中信息技術(shù)學(xué)業(yè)水平考試題庫(kù)試題7
- 粵教板2019高中信息技術(shù)必修一全冊(cè)練習(xí)附答案
- 研究生學(xué)術(shù)表達(dá)能力培養(yǎng)智慧樹(shù)知到答案2024年西安建筑科技大學(xué)、清華大學(xué)、同濟(jì)大學(xué)、山東大學(xué)、河北工程大學(xué)、《環(huán)境工程》英文版和《環(huán)境工程》編輯部
- 中國(guó)骨關(guān)節(jié)炎診療指南(2024版)解讀
- 職業(yè)院校技能大賽《植物病蟲(chóng)害防治》賽項(xiàng)賽題及答案
- 第六單元測(cè)試卷(單元卷)-2024-2025學(xué)年六年級(jí)上冊(cè)統(tǒng)編版語(yǔ)文
- 2024 中國(guó)主要城市群生態(tài)環(huán)境保護(hù)營(yíng)商競(jìng)爭(zhēng)力指數(shù)研究報(bào)告
評(píng)論
0/150
提交評(píng)論