版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、項(xiàng)目一任務(wù)一 體會(huì)面向?qū)ο笈c面向過程的不同思維方式任務(wù)二 創(chuàng)建簡(jiǎn)單的C+應(yīng)用程序打開C+面向?qū)ο蟪绦蛟O(shè)計(jì)之門任務(wù)說明任務(wù)一 體會(huì)面向?qū)ο笈c面向過程的不同思維方式在本任務(wù)中我們來學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計(jì)思想以及其與面向過程的不同。預(yù)備知識(shí)一、什么是面向?qū)ο蟮某绦蛟O(shè)計(jì)思想二、面向?qū)ο笈c面向過程比較一、什么是面向?qū)ο蟮某绦蛟O(shè)計(jì)思想其基本出發(fā)點(diǎn)是盡可能按照人類認(rèn)識(shí)世界的方法和思維方式來分析和解決問題??陀^世界是由許多具體的事物或者事件、抽象的概念和規(guī)則等組成的,因此,人們研究的對(duì)象事、物、概念都統(tǒng)稱為“對(duì)象”。面向?qū)ο蟮脑O(shè)計(jì)方法是以對(duì)象作為最基本的元素,以對(duì)象作為分析問題、解決問題的核心。下面我們了解幾個(gè)
2、面向?qū)ο蟪绦蛟O(shè)計(jì)中涉及的基本概念。1對(duì)象2類3封裝4繼承5多態(tài)面向?qū)ο蟪绦蛟O(shè)計(jì)方法的優(yōu)勢(shì)可以歸納為以下幾點(diǎn):二、面向?qū)ο笈c面向過程比較(1)程序的開發(fā)效率高(2)程序代碼的可重用性高(3)程序易于維護(hù)任務(wù)實(shí)施 運(yùn)用面向?qū)ο蠛兔嫦蜻^程兩種思想解決同一問題案例說明本任務(wù)中我們將分別使用面向過程和面向?qū)ο蟮某绦蛟O(shè)計(jì)方法設(shè)計(jì)兩個(gè)功能完全相同的程序(根據(jù)矩形的長(zhǎng)和寬求其周長(zhǎng)和面積),并結(jié)合任務(wù)內(nèi)容說明兩種程序設(shè)計(jì)思想的異同。實(shí)施步驟1以面向過程的程序設(shè)計(jì)方式思考步驟1 以面向過程的思想來解決問題,步驟如下:(1)確定所求長(zhǎng)方形的長(zhǎng)和寬。(2)確定計(jì)算長(zhǎng)方形的周長(zhǎng)和面積的公式并計(jì)算。(3)輸出計(jì)算結(jié)果。步
3、驟2 根據(jù)解題思路編寫代碼,如【例1-1】所示?!纠?-1】 以面向過程程序設(shè)計(jì)思想編碼。/1-1.cpp#include /包含頭文件iostream.husing namespace std;/使用標(biāo)準(zhǔn)命名空間void main()/主程序 int perimeter,area;/聲明周長(zhǎng)與面積變量 int length=20,width=10;/聲明長(zhǎng)、寬變量并賦初值 perimeter=2*(length+width);/求周長(zhǎng) area=length*width;/求面積 coutperimeter=perimeterendl;/輸出結(jié)果coutarea=areaendl;2以面向?qū)?/p>
4、象的程序設(shè)計(jì)方式思考步驟1 以面向?qū)ο蟮乃枷雭斫鉀Q問題,步驟如下:(1)將長(zhǎng)方形類的共性,即兩個(gè)基本屬性(長(zhǎng)和寬)和兩個(gè)行為(求周長(zhǎng)和求面積)抽取出來,設(shè)計(jì)一個(gè)長(zhǎng)方形類。(2)根據(jù)長(zhǎng)方形類創(chuàng)建一個(gè)對(duì)象。(3)通過調(diào)用對(duì)象的行為求出其周長(zhǎng)和面積。步驟2 根據(jù)解題思路編寫代碼,如【例1-2】所示?!纠?-2】 以面向?qū)ο蟪绦蛟O(shè)計(jì)思想編碼。/1-2.cpp#include /包含頭文件iostream.husing namespace std;/使用標(biāo)準(zhǔn)命名空間class Rectangle/定義長(zhǎng)方形類public:Rectangle(float w=0,float l=0)width=w;len
5、gth=l;/定義構(gòu)造函數(shù),完成創(chuàng)建對(duì)象時(shí)的初始化工作,即為長(zhǎng)和寬賦初值void GetArea()coutarea=width*length endl;/定義求面積方法void GetPerim()coutperimeter=2*(width+length)endl;/定義求周長(zhǎng)方法private:float width,length; /外界不可訪問的私有成員;void main() Rectangle a(10,20);/定義長(zhǎng)方形類的一個(gè)變量a,即實(shí)例化一個(gè)/特殊的長(zhǎng)方形對(duì)象a,它的長(zhǎng)是20,寬是10a.GetPerim();/調(diào)用a對(duì)象的兩個(gè)方法a.GetArea();任務(wù)二 創(chuàng)建簡(jiǎn)
6、單的C+應(yīng)用程序任務(wù)說明在本任務(wù)中我們來學(xué)習(xí)C+應(yīng)用程序的結(jié)構(gòu)、C+程序的開發(fā)過程以及C+開發(fā)環(huán)境Visual C+ 6.0的使用。預(yù)備知識(shí)一、認(rèn)識(shí)C+程序二、C+程序的開發(fā)過程三、Visual C+ 6.0集成開發(fā)環(huán)境簡(jiǎn)介四、Visual C+ 6.0的排錯(cuò)與調(diào)試功能1一個(gè)C+程序一、認(rèn)識(shí)C+程序#include /包含頭文件iostream.h#include /包含頭文件string.h,字符串using namespace std;/使用標(biāo)準(zhǔn)命名空間/=int main() string greeting=hello world!; /定義一個(gè)字符串對(duì)象變量,并賦初值couthello
7、 world!n; /在屏幕上輸出字符串“hello world!”并換行coutwelcome to C+!endl; /在屏幕上輸出“welcome to C+!”并換行coutgreetingendl; /在屏幕上輸出字符串變量greeting的內(nèi)容并換行return 0;/程序結(jié)束2C+程序的構(gòu)成(1)一個(gè)C+程序可以由一個(gè)或多個(gè)源程序單元構(gòu)成,每個(gè)源程序單元可被看成一個(gè)文件。【例1-3】中的例子僅由一個(gè)源程序單元構(gòu)成。(2)在一個(gè)源程序單元中,一般包括以下組成部分: 預(yù)處理命令。 全局聲明部分。 函數(shù)。3C+程序的書寫形式(1)C+的書寫格式比較自由,一行內(nèi)可以寫幾個(gè)語句,一個(gè)語句也
8、可以寫在多行。(2)在程序中添加必要的注釋,也是成為一個(gè)優(yōu)秀程序員所必需的。編譯系統(tǒng)在編譯代碼時(shí)會(huì)將注釋內(nèi)容忽略。一般情況下,內(nèi)容較少的簡(jiǎn)單注釋用“/”,而跨行的注釋則用“/*/”。二、C+程序的開發(fā)過程1編寫程序2編譯程序3連接目標(biāo)文件4運(yùn)行程序 總體而言,C+程序的整個(gè)開發(fā)過程可用圖所示的流程圖表示。其中,實(shí)線表示操作流程,虛線表示文件的輸入/輸出。三、Visual C+ 6.0集成開發(fā)環(huán)境簡(jiǎn)介 本書選用了使用較為廣泛的Visual C+ 6.0作為C+程序的開發(fā)環(huán)境,圖所示為Visual C+ 6.0的集成開發(fā)環(huán)境界面。四、Visual C+ 6.0的排錯(cuò)與調(diào)試功能第一步 設(shè)置斷點(diǎn)第二步
9、 開始調(diào)試程序第三步 單步運(yùn)行 單步調(diào)試程序時(shí),可以在Variables窗口和Watch窗口中察看變量值的變化,這兩個(gè)窗口的作用如下: 在Variables窗口中會(huì)自動(dòng)顯示當(dāng)前運(yùn)行程序中所有變量的值。隨著單步調(diào)試的進(jìn)行,我們會(huì)看到變量i的值逐漸遞增。 如果本地變量比較多,Variables窗口就會(huì)比較混亂,此時(shí)可以直接在代碼中選中需要監(jiān)控的變量,將其拖放到Watch列表,該變量的值會(huì)被顯示出來。任務(wù)實(shí)施創(chuàng)建并運(yùn)行自己的第一個(gè)C+程序單擊此處添加備注 編寫和調(diào)試一個(gè)簡(jiǎn)單的C+程序,以熟悉Visual C+ 6.0的程序編寫、編譯、連接和調(diào)試方法。實(shí)施步驟1創(chuàng)建源程序 步驟1 啟動(dòng)Visual C
10、+ 6.0,打開“文件”下拉菜單,選擇“新建”菜單項(xiàng),將打開如圖所示的“新建”對(duì)話框。步驟2 如圖1-14所示,選擇“文件”選項(xiàng)卡,在左側(cè)文件類型列表中選擇“C+ Source File”選項(xiàng),表示創(chuàng)建一個(gè)C+源程序。/實(shí)訓(xùn)1-1#include using namespace std;int main()coutWelcome to C+ World!n;coutMy Friend!endl;return 0;2編譯連接將代碼輸入編輯區(qū)后,需要對(duì)程序進(jìn)行編譯連接,以發(fā)現(xiàn)源程序中是否存在錯(cuò)誤。步驟1 執(zhí)行“組建”“編譯實(shí)訓(xùn)1-1.cpp”菜單命令,系統(tǒng)將顯示圖所示對(duì)話框,詢問是否在創(chuàng)建源文件的
11、目錄下建立一個(gè)活動(dòng)工程和一個(gè)工作空間。步驟2 單擊“是”按鈕,將創(chuàng)建一個(gè)與C+源程序同名的工作區(qū)(對(duì)應(yīng)文件為“實(shí)訓(xùn)1-1.dsw”)和一個(gè)工程(對(duì)應(yīng)文件為“實(shí)訓(xùn)1-1.dsp”),系統(tǒng)開始編譯。編譯結(jié)束后,將在輸出窗口輸出編譯信息,如圖所示。步驟3 編譯信息顯示“實(shí)訓(xùn)1-1.obj - 0 error(s), 0 warning(s)”,表示編譯程序時(shí)沒有錯(cuò)誤和警告。為此,繼續(xù)執(zhí)行“組建”“組建實(shí)訓(xùn)1-1.exe”菜單命令,對(duì)生成的目標(biāo)程序進(jìn)行連接,以生成可執(zhí)行程序,如圖所示。3調(diào)試運(yùn)行編譯連接通過后,執(zhí)行“組建”“執(zhí)行實(shí)訓(xùn)1-1.exe”菜單命令,或者直接按【Ctrl+F5】組合鍵,運(yùn)行生成
12、的程序,將出現(xiàn)圖所示畫面。結(jié)果正確無誤,按任意鍵返回。至此,一個(gè)完整的C+程序從建立到運(yùn)行就完成了。項(xiàng)目拓展熟悉Visual C+工作區(qū)與工程的使用C+程序唯有放入某個(gè)工作區(qū)和工程,才能被編譯和連接。為了便于讀者更好地使用Visual C+,我們首先對(duì)工作區(qū)、工程等概念進(jìn)行一些簡(jiǎn)要說明。(1)在Visual C+中,工作區(qū)用來管理工程,而工程用來管理C+源程序(*.cpp)、C+頭文件(*.h)、資源文件等。因此,如果我們開發(fā)的程序比較龐大的話,應(yīng)首先創(chuàng)建工作區(qū),然后創(chuàng)建工程,最后利用工程管理C+源程序、頭文件等。(2)我們既可以為在工作區(qū)新建工程,或者在工程中新建C+程序、頭文件,也可以將現(xiàn)
13、有工程添加到工作區(qū)中,或者將現(xiàn)有C+源程序、頭文件等添加到工程中。(3)Visual C+的編譯是針對(duì)工程中的C+程序的,而連接是針對(duì)工程的。通過選擇“組建”菜單中的“組建”,可以對(duì)工程中的程序統(tǒng)一進(jìn)行編譯和連接。(4)每個(gè)工作區(qū)和工程都與某個(gè)文件夾相對(duì)應(yīng),并且工作區(qū)文件的擴(kuò)展名為.dsw,工程文件的擴(kuò)展名為.dsp。(5)創(chuàng)建工程時(shí),如果系統(tǒng)尚未創(chuàng)建工作區(qū),則系統(tǒng)會(huì)自動(dòng)創(chuàng)建一個(gè)與工程同名的工作區(qū),并以此名稱在指定文件夾中創(chuàng)建一個(gè)新文件夾,以存放相關(guān)文件。(6)要想編輯C+源程序或頭文件等,最好打開工作區(qū)文件,如此一來,我們可以直接對(duì)C+源程序、頭文件等進(jìn)行修改、編譯和連接。(7)如果創(chuàng)建的工
14、程是一個(gè)Win32 Console Application(Win32控制臺(tái)應(yīng)用程序),則必須在工程中的某個(gè)C+程序中包含main()函數(shù),以設(shè)置應(yīng)用程序的入口。此外,每個(gè)工程中只能有一個(gè)main()函數(shù),否則,將無法連接目標(biāo)文件。Thank you!項(xiàng)目二任務(wù)一 熟悉C+與C在基本控制上的一些區(qū)別任務(wù)二 學(xué)習(xí)有關(guān)函數(shù)方面的區(qū)別任務(wù)三 掌握C+中關(guān)于引用的靈活運(yùn)用任務(wù)四 掌握C+中管理動(dòng)態(tài)內(nèi)存空間的方法由C到C+ 用法更靈活、功能更強(qiáng)大任務(wù)說明預(yù)備知識(shí)任務(wù)一 熟悉C+與C在基本控制上的一些區(qū)別 在本任務(wù)中我們來學(xué)習(xí)C+與C在基本控制上的一些區(qū)別,主要包括輸入/輸出的實(shí)現(xiàn)、強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)換方式以
15、及新增了bool類型。一、用I/O流實(shí)現(xiàn)輸入/輸出二、新增強(qiáng)制類型轉(zhuǎn)換方式三、新增bool類型一、用I/O流實(shí)現(xiàn)輸入/輸出 cin是輸入流對(duì)象,cout是輸出流對(duì)象,它們是在編譯系統(tǒng)中的輸入/輸出流庫(kù)中定義的,定義后系統(tǒng)會(huì)在內(nèi)存中開辟一段緩沖區(qū),用來暫存輸入/輸出流的數(shù)據(jù)。使用它們時(shí)必須將頭文件“iostream.h”加入到本文件中,即在程序的開頭使用預(yù)處理命令“#include ”。(一)輸入語句輸入語句的一般格式為:cin表達(dá)式1表達(dá)式2表達(dá)式n; 在使用cin語句時(shí),通過鍵盤輸入的數(shù)據(jù)應(yīng)與變量定義的數(shù)據(jù)類型一致,并且輸入數(shù)據(jù)的個(gè)數(shù)應(yīng)與變量的個(gè)數(shù)相同。輸入完數(shù)據(jù)后鍵入回車,流提取操作符“”
16、便從輸入流中提取出由空格、制表符和換行符間隔開的數(shù)據(jù)賦給相應(yīng)的變量。(二)輸出語句輸出語句的一般格式為:cout表達(dá)式1表達(dá)式2表達(dá)式nendl; endl是C+中行結(jié)束符,只能用于輸出流中,其作用是在執(zhí)行換行操作的同時(shí),將緩沖區(qū)內(nèi)已有的數(shù)據(jù)全部輸出,并清空緩沖區(qū)。(三)輸入/輸出的格式控制常用的輸入/輸出流格式控制符如表所示。二、新增強(qiáng)制類型轉(zhuǎn)換方式強(qiáng)制轉(zhuǎn)換數(shù)據(jù)類型的一般形式為:(類型名)變量 和 (類型名)(表達(dá)式)也可以寫成類型名(變量) 和 類型名(表達(dá)式) 例如,下面將變量a強(qiáng)制轉(zhuǎn)換成int型,將m與n的和強(qiáng)制轉(zhuǎn)換成double型,將8與3取余的結(jié)果強(qiáng)制轉(zhuǎn)換成char型。int(a)
17、double(m+n)char(8%3) 當(dāng)進(jìn)行強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)換的對(duì)象是一個(gè)包含多項(xiàng)的表達(dá)式時(shí),必須將表達(dá)式用括號(hào)括起。例如,將7/4的結(jié)果強(qiáng)制轉(zhuǎn)換成double型,應(yīng)該寫成double(7/4) 此時(shí)由于7和4均為整型,故7/4的結(jié)果為整型1,強(qiáng)制轉(zhuǎn)換為雙精度型數(shù)據(jù)后,結(jié)果仍為1,而寫成(double)7/4 則表示將7的數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)換為double型,再與4求商,結(jié)果是雙精度型數(shù)據(jù)1.75。三、新增bool類型 bool(布爾型,也稱邏輯型)只有兩個(gè)值,即整數(shù)0(表示邏輯假)和1(表示邏輯真)。在C+語言中還定義了這兩個(gè)布爾型常量所對(duì)應(yīng)的符號(hào)常量false和true,false的值為0,
18、表示邏輯假,true的值為1,表示邏輯真。 由于邏輯值是整數(shù)0和1,所以它也能夠像其他整數(shù)一樣出現(xiàn)在表達(dá)式里,參與各種整數(shù)運(yùn)算。【例2-3】 布爾常量應(yīng)用示例。#include using namespace std; int main() cout布爾類型的符號(hào)常量true對(duì)應(yīng)的邏輯值是:trueendl;cout布爾類型的符號(hào)常量false對(duì)應(yīng)的邏輯值是:falseendl;return 0;程序運(yùn)行結(jié)果如圖所示。任務(wù)實(shí)施輸出楊輝三角案例說明楊輝三角是一個(gè)由數(shù)字排列成的三角形數(shù)表,如圖所示。 它描述的是兩個(gè)未知數(shù)和的冪次方運(yùn)算后的系數(shù)問題。例如,(xy)2x22xyy2,這樣系數(shù)就是1,2
19、,1,這就是楊輝三角的其中一行。依次下去,(xy)3、(xy)4等的運(yùn)算結(jié)果的各項(xiàng)系數(shù)就構(gòu)成了楊輝三角的其他各行。編寫程序,根據(jù)輸入的行數(shù)(小于14)輸出楊輝三角。案例分析楊輝三角每行的數(shù)字是有一定規(guī)律的:每一行數(shù)字的個(gè)數(shù)等于所在的行數(shù),每行的第一個(gè)數(shù)字均為1,其后數(shù)字為:前面數(shù)字(數(shù)字所在行號(hào)(自1起)數(shù)字所在行中的序號(hào)(自0起)/數(shù)字所在行中的序號(hào)。為了使輸出的數(shù)字排列成如圖所示的金字塔形狀,需控制各行數(shù)字之間空格的個(gè)數(shù)。每行第一個(gè)數(shù)字之前空格的個(gè)數(shù)依次遞減2,兩個(gè)數(shù)字之間的空格個(gè)數(shù)有三種情況:如果輸出的數(shù)字是一個(gè)一位數(shù),則在該數(shù)字后輸出3個(gè)空格;如果輸出的數(shù)字是一個(gè)兩位數(shù),則在該數(shù)字后輸
20、出2個(gè)空格;如果輸出的數(shù)字是一個(gè)三位數(shù),則在該數(shù)字后輸出1個(gè)空格。根據(jù)以上規(guī)律,我們可以利用循環(huán)嵌套結(jié)構(gòu)逐行逐個(gè)輸出數(shù)字和空格。由于確定了行數(shù),循環(huán)的次數(shù)也就跟著確定了,故我們使用的是for循環(huán)。實(shí)施步驟步驟1 在Visual C+中新建一個(gè)C+ 源文件,根據(jù)分析編寫代碼如下:#include void main() int n,r,c,m,j=0;coutm;while (m=14)/如果連續(xù)三次輸入的數(shù)字不符合要求,則退出程序 if (j=2) cout你的錯(cuò)誤輸入已達(dá)3次,你無權(quán)再輸入!endl;return;cout你輸入的行數(shù)超出范圍,請(qǐng)重新輸入!endl;coutm;j+;/累計(jì)輸
21、入次數(shù)for (n=0;n=m-1;n+)/逐行輸出數(shù)字和空格 for(r=1;r15-n;r+)/*輸出第一個(gè)數(shù)字之前的空格,為了打印出金字塔形狀,要保證各行依次遞減2個(gè)空格*/cout ;c=1;/第一個(gè)數(shù)字總為1coutc ;/輸出第一個(gè)數(shù)字以及3個(gè)空格for(r=1;r=n;r+)/輸出各行的其他數(shù)字和空格 c=c*(n-r+1)/r;/計(jì)算應(yīng)輸出數(shù)字if(c100)/根據(jù)數(shù)值大小確定數(shù)字后面的空格個(gè)數(shù)if(c10)coutc ;/一位數(shù)的后面輸出3個(gè)空格elsecoutc ;/兩位數(shù)的后面輸出2個(gè)空格elsecoutc ;/三位數(shù)的后面輸出1個(gè)空格coutendl;步驟2 經(jīng)編譯、連
22、接后,程序運(yùn)行結(jié)果如圖所示。任務(wù)二 學(xué)習(xí)有關(guān)函數(shù)方面的區(qū)別任務(wù)說明在本任務(wù)中,我們來學(xué)習(xí)C+語言與C語言在函數(shù)語法和使用方面的區(qū)別。預(yù)備知識(shí)一、局部變量隨用隨定義二、作用域限定符:擴(kuò)大全局變量的可見范圍三、形式參數(shù)可帶有默認(rèn)值四、內(nèi)聯(lián)函數(shù) 在C+中,允許變量定義語句在程序中的任何地方,只要在是使用它之前就可以;而C語言中,必須要在函數(shù)開頭部分。另外,C+允許重復(fù)定義變量,C語言標(biāo)準(zhǔn)中是不允許的。通常情況下,如果全局變量與局部變量同名,局部變量在其作用域內(nèi)具有較高的優(yōu)先權(quán),將會(huì)屏蔽全局變量。在C+中,可以通過作用域限定符“:”訪問被屏蔽的全局變量。二、作用域限定符:擴(kuò)大全局變量的可見范圍一、局部
23、變量隨用隨定義【例2-4】 使用作用域限定符: 訪問被屏蔽的全局變量。#include using namespace std;int v1=80;int main() int v1=8; coutv1; coutn您輸入的v1值是v1endl;coutn全局變量v1的值是:v1endl;return 0;程序運(yùn)行結(jié)果如圖所示。三、形式參數(shù)可帶有默認(rèn)值通常情況下,在調(diào)用函數(shù)時(shí)要為函數(shù)的每個(gè)形參賦予一個(gè)相應(yīng)的實(shí)參值。但有時(shí)在主調(diào)函數(shù)中沒有給出實(shí)參,或者多次調(diào)用同一函數(shù)使用同樣的實(shí)參時(shí),給形參設(shè)置一個(gè)默認(rèn)值,被調(diào)函數(shù)就可以按指定的默認(rèn)值來執(zhí)行。函數(shù)形參的默認(rèn)值可以在函數(shù)原型的聲明中或函數(shù)定義中指定
24、。例如:float area(float r=2.5);指定r的默認(rèn)值為2.5,在調(diào)用此函數(shù)時(shí)可以不必給出實(shí)參的值,即等價(jià)于調(diào)用area(2.5)。如果函數(shù)中有多個(gè)形參,可以為每個(gè)形參指定一個(gè)默認(rèn)值,也可以只對(duì)部分形參指定默認(rèn)值,指定默認(rèn)值必須按照從右到左的順序進(jìn)行。即為某個(gè)參數(shù)指定默認(rèn)值時(shí),其后的參數(shù)都必須指定默認(rèn)值,否則已設(shè)默認(rèn)值將被忽略。例如:void f1(double a,float b=2.5,int c=1);/正確void f2(double a,float b=2.5,int c);/*不正確。由于c未指定默認(rèn)值,故b的默認(rèn)值無效*/為函數(shù)中的形參設(shè)置了默認(rèn)值后,實(shí)參的個(gè)數(shù)可
25、以與形參的個(gè)數(shù)不同。在進(jìn)行函數(shù)調(diào)用時(shí),實(shí)參與形參按照從左到右的順序進(jìn)行匹配,沒有給出實(shí)參的,該形參就取指定的默認(rèn)值。例如:int sum(int a,int b, int c=5,int d=6);在此函數(shù)原型中指定了形參c和d的默認(rèn)值分別為5和6,若調(diào)用語句為:sum(3,2,1);則等價(jià)于執(zhí)行語句:sum(3,2,1,6);四、內(nèi)聯(lián)函數(shù)定義內(nèi)聯(lián)函數(shù)的格式為:inline 函數(shù)類型 函數(shù)名(形參列表) 函數(shù)體 ;一般只將規(guī)模很小(一般為5個(gè)語句以下)且使用頻繁的函數(shù)聲明為內(nèi)聯(lián)函數(shù),并且內(nèi)聯(lián)函數(shù)內(nèi)不能包括循環(huán)語句和switch語句?!纠?-6】 內(nèi)聯(lián)函數(shù)應(yīng)用示例。#include inline
26、 int sum(int x,int y,int z);/對(duì)函數(shù)sum原型的聲明,聲明為內(nèi)聯(lián)函數(shù)void main() int a,b,c,s;coutabc;s=sum(a,b,c); /求三個(gè)數(shù)的和coutsum is sendl;int sum(int x,int y,int z)/定義內(nèi)聯(lián)函數(shù)sum return x+y+z; 程序運(yùn)行結(jié)果如圖所示。任務(wù)實(shí)施漢諾塔問題求解案例說明已知臺(tái)上有3根標(biāo)號(hào)為A、B、C的柱子,在A柱子上放著若干個(gè)盤子,每一個(gè)都比下面的略小一些?,F(xiàn)要把A柱子上的盤子全部移到C柱子上,要求是:一次只能移動(dòng)一個(gè)盤子,移動(dòng)過程中大盤子不能放在小盤子上面。編寫程序,輸入A
27、柱子上盤子的數(shù)量,輸出將盤子從A柱子移動(dòng)到C柱子上時(shí)移動(dòng)的步驟。案例分析漢諾塔問題是典型的遞歸調(diào)用問題。當(dāng)n1時(shí),直接將盤子從A移動(dòng)到C即可。將n(n1)個(gè)盤子從A柱移動(dòng)到C柱可以分為三個(gè)步驟: 將n-1個(gè)盤子借助C柱子移到B柱子; 將最后一個(gè)盤子從A柱子移到C柱子; 將n-1個(gè)盤子從B借助A移到C。計(jì)算移動(dòng)次數(shù)的公式為2m-1,其中m是盤子總數(shù)。實(shí)施步驟步驟1 在Visual C+中新建一個(gè)C+ 源文件,根據(jù)分析編寫代碼如下:#includevoid move(char one,char anoth) /將一個(gè)柱子上的盤子移動(dòng)到另一個(gè)柱子 coutone anothendl; void ha
28、noi(int n,char no1,char no2,char no3)/求解漢諾塔問題 if (n=1) move(no1,no3);/只有一個(gè)盤子時(shí),從A移動(dòng)到Celse hanoi(n-1,no1,no3,no2);/將n-1個(gè)盤子借助C從A移動(dòng)到Bmove(no1,no3);/將最后一個(gè)盤子從A移動(dòng)到Chanoi(n-1,no2,no1,no3);/將n-1個(gè)盤子借助A從B移動(dòng)到Cint times(int n)/計(jì)算移動(dòng)次數(shù) int i,times=1;for(i=1;i=n;i+)times*=2;return times-1;void main() int m;coutm;co
29、ut當(dāng)有m個(gè)盤子時(shí),移動(dòng)步驟依次為:endl;hanoi(m,A,B,C);cout移動(dòng)次數(shù)為times(m)次endl;步驟2 經(jīng)編譯、連接后,程序運(yùn)行結(jié)果如圖所示。任務(wù)三 掌握C+中關(guān)于引用的靈活運(yùn)用任務(wù)說明引用是C+對(duì)C的一個(gè)重要擴(kuò)充,在本任務(wù)中我們就來學(xué)習(xí)引用。一、引用的概念及使用預(yù)備知識(shí)二、引用作為形式參數(shù)三、引用與指針的區(qū)別四、引用作為返回值一、引用的概念及使用引用是指為變量起一個(gè)別名,聲明引用型變量的一般形式為:數(shù)據(jù)類型 &引用名變量名;例如,假設(shè)有一個(gè)變量a,若給它起一個(gè)別名b,就可以這樣來聲明:int a;int &b=a;/聲明b是a的引用聲明引用時(shí),b和a表示相同的變量,
30、它們具有相同的地址。換句話說,對(duì)b進(jìn)行操作也就是對(duì)a進(jìn)行操作。在聲明一個(gè)引用型變量時(shí),必須同時(shí)對(duì)其進(jìn)行初始化。以下語句是不合法的:int a;int &b;b=a;【例2-7】 引用的簡(jiǎn)單應(yīng)用。#include void main() int a=10;int &b=a;/聲明b是a的引用a=a*a;couta bendl;b=b/2;coutb aendl;程序運(yùn)行結(jié)果如圖所示。二、引用作為形式參數(shù)在C語言中我們已經(jīng)學(xué)了函數(shù)參數(shù)傳遞的兩種方式:值傳遞和地址傳遞。將引用作為函數(shù)的參數(shù)時(shí),參數(shù)的傳遞方式為引用傳遞。引用傳遞實(shí)際上傳遞的是變量的地址,這種方式節(jié)省了大量存儲(chǔ)空間,從而能夠提高程序的執(zhí)
31、行效率。下面我們通過【例2-8】來比較值傳遞、地址傳遞和引用傳遞這三種傳遞方式?!纠?-8】 引用作為函數(shù)參數(shù)的應(yīng)用示例。要求實(shí)現(xiàn)兩個(gè)整型數(shù)據(jù)的交換。#includevoid swap1(int x,int y)/參數(shù)的值傳遞 int temp;temp=x;x=y;y=temp;void swap2(int *x,int *y)/參數(shù)的地址傳遞 int temp;temp=*x;*x=*y;*y=temp;void swap3(int &x,int &y)/參數(shù)的引用傳遞 int temp;temp=x;x=y;y=temp;void main( ) int a,b;coutab;/輸入a、
32、b兩變量的值swap1(a,b);cout值傳遞的結(jié)果:a bendl;swap2(&a,&b);cout地址傳遞的結(jié)果:a bendl;swap3(a,b);cout引用傳遞的結(jié)果:a bendl;程序運(yùn)行結(jié)果如圖所示。三、引用與指針的區(qū)別 引用是一個(gè)變量的別名,本身不單獨(dú)分配自己的內(nèi)存空間,而指針有自己的內(nèi)存空間。 引用訪問一個(gè)變量是直接訪問,而指針是間接訪問。 引用在開始的時(shí)候就綁定到了一個(gè)內(nèi)存空間,所以開始必須賦初值,而指針可以先定義后賦值?!纠?-9】 引用與指針對(duì)比應(yīng)用示例。#includevoid main( ) int i = 3,j = 4; couti=ij=jendl;i
33、nt &x = i;/定義引用couti=i;j=j;x=xendl;couti的地址&i;j的地址&j;x的地址&xendl;x = j;couti=i;j=j;x=xendl;couti的地址&i;j的地址&j;x的地址&xendl;程序運(yùn)行結(jié)果如圖所示。int *y;/定義指針couty的地址¥dl;y = &j;couti=i;j=j;y=yendl;couti的地址&i;j的地址&j;y的地址¥dl;四、引用作為返回值以引用返回函數(shù)值時(shí),定義函數(shù)時(shí)需要在函數(shù)名前加&,定義函數(shù)的格式一般如下:類型標(biāo)識(shí)符 &函數(shù)名(形參列表及類型說明)函數(shù)體1通過引用返回函數(shù)值的最大好處是,
34、在內(nèi)存中不產(chǎn)生被返回值的副本。【例2-10】 定義兩個(gè)函數(shù):一個(gè)以變量方式返回函數(shù)值,一個(gè)以引用方式返回函數(shù)值。#includefloat temp;/定義全局變量tempfloat fn1(float r);/聲明函數(shù)fn1float &fn2(float r);/聲明函數(shù)fn2float fn1(float r)/定義函數(shù)fn1,以返回值的方法返回函數(shù)值 temp=r*r*3.14; return temp;float &fn2(float r)/定義函數(shù)fn2,以引用方式返回函數(shù)值 temp=r*r*3.14; return temp;void main()/主函數(shù) float a=fn
35、1(10.0); float b=fn2(10.0); coutaendlbendl;程序運(yùn)行結(jié)果如圖所示。從上圖中我們可以看出,兩種方式的運(yùn)行結(jié)果是相同的,但是它們?cè)趦?nèi)存中的活動(dòng)情況卻是不相同的,下面我們對(duì)照?qǐng)D示進(jìn)行說明。函數(shù)fn1()是一般的函數(shù)返回值方式:返回全局變量temp值時(shí),C+創(chuàng)建臨時(shí)變量并將temp的值314復(fù)制給該臨時(shí)變量,返回到主函數(shù)后,賦值語句a=fnl(10.0)把臨時(shí)變量的值314復(fù)制給a,其內(nèi)存情況如圖所示。函數(shù)fn2()以引用方式返回返回值,不產(chǎn)生副本,所以,直接將變量temp返回給主函數(shù),這樣避免了臨時(shí)變量的產(chǎn)生。這種方式提高了程序執(zhí)行效率和空間利用率,其內(nèi)存情
36、況如圖所示。2返回引用的函數(shù)可以作為左值。下面我們通過一個(gè)案例來了解這種使用方法。【例2-11】 將返回引用的函數(shù)值作為賦值表達(dá)式的左值。#include int &put(int n);int vals10;int error=-1;void main() put(0)=10; /以put(0)函數(shù)值作為左值,等價(jià)于vals0=10; put(9)=20; /以put(9)函數(shù)值作為左值,等價(jià)于vals9=20; coutvals0endl; coutvals9=0 & n=9 ) return valsn; else coutsubscript error; return error; 程
37、序運(yùn)行結(jié)果如圖所示。引用作為返回值時(shí),要注意以下兩點(diǎn):(1)不能返回局部變量的引用(2)不能返回函數(shù)內(nèi)部new分配的內(nèi)存的引用案例說明任務(wù)實(shí)施通過引用操作數(shù)組創(chuàng)建兩個(gè)數(shù)組,輸入數(shù)組元素后將數(shù)組值輸出,然后將兩數(shù)組合并為一個(gè)數(shù)組并輸出。實(shí)施步驟步驟1 在Visual C+中新建一個(gè)C+ 源文件,編寫代碼如下:#include#include#include#define LIST_INIT_SIZE 100/ 數(shù)組初始化元素個(gè)數(shù)#define LISTINCREMENT 10/ 數(shù)組元素個(gè)數(shù)遞增長(zhǎng)度#define Status int#define ElemType int#define OK
38、1#define ERROR 0#define OVERFLOW -2typedef struct ElemType *elem;int length;/ 數(shù)組中實(shí)際存放的元素個(gè)數(shù)int listsize;/ 數(shù)組長(zhǎng)度,可容納的最大元素個(gè)數(shù) SqList ;Status InitList_Sq(SqList &L) / 構(gòu)造一個(gè)空的數(shù)組L L.elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType); if (!L.elem) return ERROR;/ 存儲(chǔ)分配失敗 L.length = 0;/ 數(shù)組實(shí)際長(zhǎng)度為0 L.listsiz
39、e = LIST_INIT_SIZE;/ 初始存儲(chǔ)容量 return OK;Status InputList_Sq(SqList &L) / 向數(shù)組L中輸入n個(gè)元素 int i; printf(nInput %d numbers:,L.length); for(i=0;iL.length;i+) scanf(%d,&L.elemi); printf(nInput Success!:); return OK;Status OutputList_Sq(SqList L) / 輸出數(shù)組L中的所有元素 int i; printf(nThere Are %d numbers :, L.length);
40、for(i=0;i L.length;i+) printf(%d , L.elemi); printf(nOutput Success!:); return OK;void MergeList_Sq(SqList La, SqList Lb, SqList &Lc) / 歸并La和Lb得到新的順序線性表Lc ElemType *pa,*pb,*pc,*pa_last,*pb_last; pa = La.elem; pb = Lb.elem; Lc.listsize = Lc.length = La.length+Lb.length; pc = Lc.elem = (ElemType *)mal
41、loc(Lc.listsize*sizeof(ElemType); if (!Lc.elem) exit(OVERFLOW);/ 存儲(chǔ)分配失敗 pa_last = La.elem+La.length-1; pb_last = Lb.elem+Lb.length-1; while (pa = pa_last & pb = pb_last) / 歸并 if (*pa = *pb) *pc+ = *pa+; else *pc+ = *pb+; while (pa = pa_last) *pc+ = *pa+;/ 插入La的剩余元素 while (pb = pb_last) *pc+ = *pb+;/
42、 插入Lb的剩余元素 void main()/ 主函數(shù) SqList La,Lb,Lc; InitList_Sq(La); InitList_Sq(Lb); InitList_Sq(Lc);La.length=5;Lb.length=4;printf(nInput array A); InputList_Sq(La); / 輸入數(shù)組La OutputList_Sq(La); printf(nInput array B); InputList_Sq(Lb); / 輸入數(shù)組Lb OutputList_Sq(Lb); MergeList_Sq(La,Lb,Lc); / 將數(shù)組La與Lb合并 prin
43、tf(nC=merge(A,B):); OutputList_Sq(Lc);步驟2 經(jīng)編譯、連接后,程序運(yùn)行結(jié)果如圖所示。任務(wù)四 掌握C+中管理動(dòng)態(tài)內(nèi)存空間的方法任務(wù)說明在本任務(wù)中我們來學(xué)習(xí)使用C+應(yīng)用程序的結(jié)構(gòu)、C+程序的開發(fā)過程、C+開發(fā)環(huán)境Visual C+ 6.0的使用。預(yù)備知識(shí)在C+語言中,new和delete可用來實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存空間的管理。一、用new申請(qǐng)動(dòng)態(tài)內(nèi)存空間二、用delete釋放動(dòng)態(tài)內(nèi)存空間new運(yùn)算符的操作數(shù)是一個(gè)數(shù)據(jù)類型,其作用是為變量分配內(nèi)存空間,并返回指向該變量的指針。new運(yùn)算符使用的一般格式為:一、用new申請(qǐng)動(dòng)態(tài)內(nèi)存空間指針變量new 數(shù)據(jù)類型 (初值)其中,
44、初值也可以不給出。例如:int *p;/定義了一個(gè)指向整型變量的指針p=new int(5);/*為一個(gè)整型變量分配內(nèi)存空間,p指向該變量的首地址,將該整型變量初始化為5*/new運(yùn)算符還可以為多個(gè)變量分配存儲(chǔ)空間。例如:int *p;/定義了一個(gè)指向整型變量的指針p=new int 8;/*為8個(gè)整型變量分配內(nèi)存空間,p指向第一個(gè)整型變量的首地址*/for(int i=0;i8;i+)/為p指向的8個(gè)整型變量賦值pi=i;二、用delete釋放動(dòng)態(tài)內(nèi)存空間當(dāng)new分配的空間使用完之后,必須用delete運(yùn)算符釋放這些空間。delete運(yùn)算符的一般格式為:delete 指針變量其中,指針變量是
45、指用new運(yùn)算符申請(qǐng)分配的內(nèi)存地址。當(dāng)用delete釋放為多個(gè)變量分配的地址時(shí),其格式為:delete 指針變量其中中不需要填寫變量的個(gè)數(shù)。例如:int *p=new int a8;delete p;任務(wù)實(shí)施new、delete的基本使用方法案例說明在本任務(wù)中,我們使用new和delete操作符對(duì)內(nèi)存進(jìn)行一些基本操作。實(shí)施步驟步驟1 在Visual C+中新建一個(gè)C+ 源文件,編寫代碼如下:#include using namespace std;int main ( ) /基本數(shù)據(jù)類型 int *i = new int; /沒有初始值 int *j = new int(100); /初始值為
46、100 float *f = new float(3.1415f); /初始值為3.1415 cout i = *i endl; cout j = *j endl; cout f = *f endl; /數(shù)組 int *iArr = new int3;for (int k=0; k3; k+) iArrk = (k+1)*10; cout k : iArrk endl; /釋放內(nèi)存 delete i; delete j; delete f; delete iArr;/釋放數(shù)組空間 return 0;步驟2 編譯、連接程序,程序運(yùn)行結(jié)果如圖所示。Thank you!項(xiàng)目三任務(wù)一 初識(shí)類與對(duì)象任務(wù)
47、二 深入學(xué)習(xí)類與對(duì)象的相關(guān)知識(shí)類與對(duì)象 抽象與實(shí)體的完美結(jié)合任務(wù)說明預(yù)備知識(shí)任務(wù)一 初識(shí)類與對(duì)象類(Class)是具有相同屬性和行為的一組對(duì)象的集合,是對(duì)屬于該類的全部對(duì)象的統(tǒng)一抽象描述。類是面向?qū)ο笾凶顬橹匾母拍钪?,利用類可以?shí)現(xiàn)數(shù)據(jù)的封裝、隱藏、繼承和派生,C+中許多復(fù)雜的程序都是用類來實(shí)現(xiàn)的。使用類時(shí),用戶不需要了解類的具體實(shí)現(xiàn),只需要通過外部接口,以特定的訪問權(quán)限來使用類的成員即可。一、類的聲明及類成員的訪問二、類成員函數(shù)的定義三、對(duì)象成員的定義與引用四、構(gòu)造函數(shù)與析構(gòu)函數(shù)一、類的聲明及類成員的訪問類也是一種數(shù)據(jù)類型,與結(jié)構(gòu)體類型不同的是,類中除了包含數(shù)據(jù)以外,還包含對(duì)這些數(shù)據(jù)操作
48、的函數(shù),它將數(shù)據(jù)和操作封裝在一起。聲明類的一般形式為:class 類名public:公有數(shù)據(jù)成員;公有成員函數(shù);private:私有數(shù)據(jù)成員;私有成員函數(shù);protected:保護(hù)數(shù)據(jù)成員;保護(hù)成員函數(shù);9; 二、類成員函數(shù)的定義C+中,類成員的訪問屬性有以下三種:(1)public(公有的)公有的成員用public來聲明,這類成員既可以被本類中的成員函數(shù)引用,也可以被任何外部函數(shù)引用。它是類與外界的接口。(2)private(私有的)私有的成員用private來聲明,這類成員只能被本類中的成員函數(shù)所引用。(3)protected(保護(hù)的)受保護(hù)的成員用protected來聲明,這類成員只能被
49、本類及本類的派生類中成員函數(shù)引用(本書將在項(xiàng)目四中詳細(xì)講述類的繼承與派生)。三、對(duì)象成員的定義與引用在類的聲明中聲明了類的數(shù)據(jù)成員和成員函數(shù)的原型之后,還要通過對(duì)類的成員函數(shù)進(jìn)行定義來實(shí)現(xiàn)成員函數(shù)的功能,即成員函數(shù)的實(shí)現(xiàn)。成員函數(shù)的定義方法有以下3種。(1)在類內(nèi)直接定義成員函數(shù)C+中可以直接將成員函數(shù)定義在類的內(nèi)部。(2)在類外定義成員函數(shù)在類外定義成員函數(shù)的一般形式為:返回類型 類名:成員函數(shù)名(參數(shù)列表)函數(shù)體 “:”為作用域限定符,用來標(biāo)識(shí)該成員函數(shù)所屬的類。(3)在類外定義成內(nèi)聯(lián)函數(shù)在類外定義成內(nèi)聯(lián)函數(shù)的一般形式為:inline 返回類型 類名:成員函數(shù)名(參數(shù)列表)函數(shù)體 【例3-
50、1】 聲明一個(gè)時(shí)鐘類,定義該類中的幾個(gè)成員函數(shù)。#includeclass Clock/定義時(shí)鐘類Clock public:/公有成員void SetTime(int h=0,int m=0,int s=0);/成員函數(shù)void ShowTime()/在類內(nèi)定義成員函數(shù)ShowTime()couthour:minute:secondendl;private:/私有成員int hour,minute,second; ; /數(shù)據(jù)成員void Clock:SetTime(int h,int m,int s)/在類外定義成員函數(shù)SetTime() hour=h;minute=m;second=s;vo
51、id main()/主函數(shù) Clock myClock;/定義對(duì)象myClockcoutfirst time set and output:endl;myClock.SetTime();/調(diào)用成員函數(shù)myClock.ShowTime();coutsecond time set and output:endl;myClock.SetTime(8,30,45);myClock.ShowTime();程序運(yùn)行結(jié)果如圖所示。四、構(gòu)造函數(shù)與析構(gòu)函數(shù)(一)構(gòu)造函數(shù)1構(gòu)造函數(shù)概述構(gòu)造函數(shù)是一種特殊的成員函數(shù),它的主要功能是為對(duì)象分配存儲(chǔ)空間,以及為類的成員變量賦初值。構(gòu)造函數(shù)可以在類中定義,也可以在類中聲明
52、、在類外定義。定義構(gòu)造函數(shù)的一般形式為:類名: 構(gòu)造函數(shù)名(參數(shù)列表) 函數(shù)體 構(gòu)造函數(shù)名必須與類名相同,構(gòu)造函數(shù)可以有任意類型的參數(shù),但不能有任何返回值和返回類型。構(gòu)造函數(shù)不需要用戶來調(diào)用,而是在創(chuàng)建對(duì)象時(shí)自動(dòng)被調(diào)用,且只調(diào)用一次。如果是在類中定義,則省略類名和作用域限定符。如果在定義類時(shí)沒有定義任何構(gòu)造函數(shù),編譯系統(tǒng)會(huì)自動(dòng)為這個(gè)類生成一個(gè)默認(rèn)的構(gòu)造函數(shù)。這個(gè)默認(rèn)的構(gòu)造函數(shù)沒有參數(shù)且函數(shù)體是空的,它不執(zhí)行任何初始化操作?!纠?-2】 定義一個(gè)復(fù)數(shù)類的構(gòu)造函數(shù)。#include class Complex/類Complex的聲明public:/定義共有成員Complex()/在類內(nèi)定義構(gòu)造函數(shù)
53、 cout不帶參數(shù)的構(gòu)造函數(shù)被調(diào)用!endl;real=0;imag=0; void show()/定義成員函數(shù) cout(real,imag); private:/定義私有成員double real,imag;void main() Complex com;/創(chuàng)建一個(gè)對(duì)象com.show();/調(diào)用成員函數(shù)show 程序運(yùn)行結(jié)果如圖所示。2帶參數(shù)的構(gòu)造函數(shù)對(duì)于不帶參數(shù)的構(gòu)造函數(shù),當(dāng)定義該類的對(duì)象時(shí),所有對(duì)象都具有相同的初值。但在實(shí)際應(yīng)用中,用戶往往希望對(duì)不同的對(duì)象賦予不同的初值,這時(shí)就需要使用帶參數(shù)的構(gòu)造函數(shù)。定義對(duì)象的一般形式為:類名 對(duì)象名(實(shí)參1,實(shí)參2,實(shí)參n)【例3-3】 在【例3
54、-2】基礎(chǔ)上添加帶參數(shù)的構(gòu)造函數(shù)。#include class Complex/類的聲明 public:/定義公有成員Complex();/聲明無參數(shù)的構(gòu)造函數(shù)Complex(double,double);/聲明帶參數(shù)的構(gòu)造函數(shù)void show()/定義公有成員函數(shù)cout(real,imag)endl;private:/定義私有成員double real,imag;Complex:Complex() /定義無參數(shù)的構(gòu)造函數(shù) cout不帶參數(shù)的構(gòu)造函數(shù)被調(diào)用!endl;real=0;imag=0; Complex:Complex(double r,double i)/定義帶參數(shù)的構(gòu)造函數(shù)co
55、ut帶參數(shù)的構(gòu)造函數(shù)被調(diào)用!endl;real=r;imag=i;void main() Complex com;/定義對(duì)象com,調(diào)用無參數(shù)的構(gòu)造函數(shù)com.show();/調(diào)用對(duì)象的公有成員函數(shù)Complex com1(3,4);/定義對(duì)象com1,調(diào)用帶參數(shù)的構(gòu)造函數(shù)com1.show();/調(diào)用對(duì)象的公有成員函數(shù)Complex com2(1,2);/定義對(duì)象com2,調(diào)用帶參數(shù)的構(gòu)造函數(shù)com2.show();/調(diào)用對(duì)象的公有成員函數(shù) 程序運(yùn)行結(jié)果如圖所示。3帶默認(rèn)參數(shù)的構(gòu)造函數(shù)當(dāng)構(gòu)造函數(shù)帶有參數(shù)時(shí),可以通過實(shí)參將值傳遞給形參,也可以為構(gòu)造函數(shù)的參數(shù)指定默認(rèn)值。如果用戶在定義對(duì)象時(shí)沒有
56、指定實(shí)參值,編譯系統(tǒng)就使用默認(rèn)參數(shù)值來初始化數(shù)據(jù)成員?!纠?-4】 帶默認(rèn)參數(shù)的構(gòu)造函數(shù)應(yīng)用示例。#include class Complex/類的聲明 public:/定義公有成員Complex(double=0.0,double=0.0);/聲明帶默認(rèn)參數(shù)的構(gòu)造函數(shù)void show()/定義公有成員函數(shù)cout(real,imag)endl;private:/定義私有成員double real,imag;Complex:Complex(double r,double i)/定義帶參數(shù)的構(gòu)造函數(shù) cout帶默認(rèn)參數(shù)的構(gòu)造函數(shù)被調(diào)用!endl;real=r;imag=i; void main
57、() Complex com;/定義對(duì)象com,調(diào)用帶默認(rèn)參數(shù)的構(gòu)造函數(shù)com.show();/調(diào)用對(duì)象的公有成員函數(shù)Complex com1(3); /定義對(duì)象com1,調(diào)用帶參數(shù)的構(gòu)造函數(shù)com1.show();/調(diào)用對(duì)象的公有成員函數(shù)Complex com2(1,2);/定義對(duì)象com2,調(diào)用帶參數(shù)的構(gòu)造函數(shù)com2.show();/調(diào)用對(duì)象的公有成員函數(shù)程序運(yùn)行結(jié)果如圖所示。4帶參數(shù)初始化表的構(gòu)造函數(shù)構(gòu)造函數(shù)除了可以在函數(shù)體中使用賦值語句實(shí)現(xiàn)對(duì)數(shù)據(jù)成員的初始化,還可以通過參數(shù)初始化表來實(shí)現(xiàn)。帶參數(shù)初始化表的構(gòu)造函數(shù)的一般形式為:類名:構(gòu)造函數(shù)名(參數(shù)列表):參數(shù)初始化表 函數(shù)體 其中,
58、參數(shù)初始化表的一般形式為:參數(shù)名1(初值1), 參數(shù)名2(初值2), , 參數(shù)名n(初值n)【例3-5】 帶參數(shù)初始化表的構(gòu)造函數(shù)應(yīng)用示例。#include class Complex/類的聲明public:/定義公有成員Complex();/聲明不帶參數(shù)的構(gòu)造函數(shù)Complex(double r,double i);/聲明帶參數(shù)的構(gòu)造函數(shù)void show()/定義公有成員函數(shù)cout(real,imag)endl;private:/定義私有成員double real,imag;Complex:Complex():real(0),imag(0)/定義帶參數(shù)初始化表的構(gòu)造函數(shù) cout帶參數(shù)初
59、始化表的構(gòu)造函數(shù)被調(diào)用!endl; Complex:Complex(double r,double i):real(r),imag(i)/定義帶參數(shù)初始化表的構(gòu)造函數(shù) cout帶參數(shù)初始化表的構(gòu)造函數(shù)被調(diào)用!endl; void main() Complex com;/定義對(duì)象com,調(diào)用無參數(shù)的構(gòu)造函數(shù)com.show();/調(diào)用對(duì)象的公有成員函數(shù)Complex com1(1,2);/定義對(duì)象com1,調(diào)用帶參數(shù)的構(gòu)造函數(shù)com1.show();/調(diào)用對(duì)象的公有成員函數(shù) 程序運(yùn)行結(jié)果如圖所示。5構(gòu)造函數(shù)的重載在一個(gè)類中可以定義多個(gè)構(gòu)造函數(shù),這些構(gòu)造函數(shù)的名字相同,而參數(shù)的個(gè)數(shù)或參數(shù)的類型不同
60、,程序?qū)⒏鶕?jù)參數(shù)自動(dòng)調(diào)用該類中對(duì)應(yīng)的構(gòu)造函數(shù),從而對(duì)對(duì)象使用不同的初始化方法,增加程序設(shè)計(jì)的靈活性。這就是構(gòu)造函數(shù)的重載?!纠?-6】 重載構(gòu)造函數(shù)應(yīng)用示例。#include class Complex/類的聲明 public:/定義公有成員Complex();/聲明不帶參數(shù)的構(gòu)造函數(shù)Complex(int,int);/聲明帶參數(shù)的構(gòu)造函數(shù)Complex(double,double);/構(gòu)造函數(shù)的重載void show()/公有成員函數(shù) cout(real,imag)endl; private:/定義私有成員double real,imag;Complex:Complex()/定義不帶參數(shù)的構(gòu)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣州鐵路職業(yè)技術(shù)學(xué)院《采礦工程》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年浙江省安全員B證(項(xiàng)目經(jīng)理)考試題庫(kù)
- 2025黑龍江省安全員考試題庫(kù)附答案
- 2025年-河北省安全員《B證》考試題庫(kù)
- 《電影天堂》課件
- 植物的逆境生理-課件
- 上海市初中勞技試題解析2014
- 【大學(xué)課件】國(guó)際投資的企業(yè)形式
- 《植物病原病毒》課件
- 《探析權(quán)健腫瘤醫(yī)院》課件
- 礦山隱蔽致災(zāi)普查治理報(bào)告
- 零星維修工程 投標(biāo)方案(技術(shù)方案)
- 護(hù)理基礎(chǔ)測(cè)試題+參考答案
- 副總經(jīng)理招聘面試題與參考回答(某大型國(guó)企)2024年
- 2024年SATACT家教培訓(xùn)合同
- 《ESPEN重癥病人營(yíng)養(yǎng)指南(2023版)》解讀課件
- 智慧茶園監(jiān)控系統(tǒng)的設(shè)計(jì)
- 2024年宜賓發(fā)展產(chǎn)城投資限公司第三批員工公開招聘高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
- 2024年省宿州市“宿事速辦”12345政務(wù)服務(wù)便民熱線服務(wù)中心招考15名工作人員高頻考題難、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
- 2024年安徽省行政執(zhí)法人員資格認(rèn)證考試試題含答案
- 中國(guó)2型糖尿病運(yùn)動(dòng)治療指南 (2024版)
評(píng)論
0/150
提交評(píng)論