C++程序設(shè)計(jì)開(kāi)發(fā)教程課件_第1頁(yè)
C++程序設(shè)計(jì)開(kāi)發(fā)教程課件_第2頁(yè)
C++程序設(shè)計(jì)開(kāi)發(fā)教程課件_第3頁(yè)
C++程序設(shè)計(jì)開(kāi)發(fā)教程課件_第4頁(yè)
C++程序設(shè)計(jì)開(kāi)發(fā)教程課件_第5頁(yè)
已閱讀5頁(yè),還剩541頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1第1章C++程序開(kāi)發(fā)初步

2

C++程序開(kāi)發(fā)初步最簡(jiǎn)單的C++程序結(jié)構(gòu)函數(shù)類(lèi)與對(duì)象C++程序開(kāi)發(fā)過(guò)程與環(huán)境3程序設(shè)計(jì)中主要應(yīng)用兩大類(lèi)模型面向過(guò)程的模型 概括為:數(shù)據(jù)結(jié)構(gòu)+算法面向?qū)ο蟮哪P?認(rèn)為世界是由一些對(duì)象(objects)組成的,每一個(gè)對(duì)象包括屬性和方法兩部分;屬性是描述對(duì)象特征的一些數(shù)據(jù)或數(shù)據(jù)結(jié)構(gòu),方法表明對(duì)象的變化或一個(gè)對(duì)象對(duì)其他對(duì)象的作用,對(duì)象間通過(guò)消息傳遞進(jìn)行通信4最簡(jiǎn)單的C++程序結(jié)構(gòu)一個(gè)簡(jiǎn)單的C++程序運(yùn)算符與表達(dá)式數(shù)據(jù)類(lèi)型變量與常量5一個(gè)簡(jiǎn)單的C++程序#include<iostream.h>intmain(){ intx,y,s; //定義3個(gè)整數(shù):兩個(gè)代表加數(shù),一個(gè)代表和

cout<<“輸入兩個(gè)整數(shù):”; //給用戶發(fā)出輸入兩個(gè)數(shù)的提示

cin>>x>>y; //輸入兩個(gè)整數(shù)到x和y s=x+y; //將x和y相加,送到s中

cout<<“x+y=” //輸出提示

<<s //輸出s的值

<<endl; //換行,語(yǔ)句結(jié)束

return0;}6上例說(shuō)明C++的注釋符有:“//”后面與“/*”和“*/”之間的“;”是C++語(yǔ)句的結(jié)束符,表明一個(gè)語(yǔ)句的結(jié)束x”、“y”和“s”稱(chēng)為三個(gè)變量,是三個(gè)存儲(chǔ)數(shù)據(jù)的空間的名字“cout”稱(chēng)為標(biāo)準(zhǔn)輸出設(shè)備,通常指顯示器“cin”稱(chēng)為標(biāo)準(zhǔn)輸入設(shè)備,通常指鍵盤(pán)“endl”表示換行“#include”稱(chēng)為文件包含7運(yùn)算符與表達(dá)式運(yùn)算符是一種程序記號(hào),它作用于操作數(shù)而觸發(fā)某種操作由運(yùn)算符和操作數(shù)組成的符號(hào)序列,就稱(chēng)為表達(dá)式8最基本的運(yùn)算符算術(shù)運(yùn)算符賦值運(yùn)算符復(fù)合賦值運(yùn)算符9運(yùn)算符在表達(dá)式中的運(yùn)算順序運(yùn)算符的優(yōu)先級(jí)別運(yùn)算符與操作數(shù)的結(jié)合方向運(yùn)算符的先后排列順序10各種運(yùn)算符間的優(yōu)先級(jí)別和結(jié)合性運(yùn)算符結(jié)合性優(yōu)先級(jí)別單目減:-←高低雙目算術(shù)運(yùn)算符:*/→+-→標(biāo)準(zhǔn)輸入輸出:>><<→賦值:=←11例1.1.1

#include<iostream.h>intmain(){intx,y;cout<<"x=3,y=8,x*=y+1:"<<(x=3,y=8,x*=y+1)<<endl;cout<<"x=3,y=8,x=x*y+1:"<<(x=3,y=8,x=x*y+1)<<endl;return0;}12++與--有兩種使用形式前綴形式,即它們?cè)诓僮鲾?shù)前,如++x,--x后綴形式,即它們?cè)诓僮鲾?shù)后,如x++,x--++表達(dá)式與--表達(dá)式獨(dú)立使用時(shí),前綴形式與后綴形式無(wú)區(qū)別,但它們?cè)诒磉_(dá)式中被引用時(shí),結(jié)果是不同的。前綴形式是先增(減)1,后被引用;后綴形式是先被引用,后增(減)113例1.1.2

#include<iostream.h>intmain(){intx,y;x=5,y=x++;//先引用后增1cout<<"x=5,y=x++:"<<y<<",x="<<x<<endl;x=5,y=++x;//先增1后引用

cout<<"x=5,y=++x:"<<y<<",x="<<x<<endl; return0;}14數(shù)據(jù)類(lèi)型整型類(lèi)型與實(shí)型類(lèi)型字符類(lèi)型字符串算術(shù)數(shù)據(jù)的類(lèi)型轉(zhuǎn)換sizeof運(yùn)算符15數(shù)據(jù)的規(guī)范化為數(shù)據(jù)分配相應(yīng)大小的存儲(chǔ)空間;確定數(shù)據(jù)值的范圍;確定數(shù)據(jù)的表示精度;確定數(shù)據(jù)可以進(jìn)行的運(yùn)算種類(lèi)。16最常用的數(shù)據(jù)類(lèi)型的比較數(shù)據(jù)類(lèi)型關(guān)鍵字意義存儲(chǔ)空間表數(shù)精度(有效數(shù)字)表數(shù)范圍運(yùn)算類(lèi)型char字符8位+、-、%short短整數(shù)16位-32768~32767+、-、*、/、%int整數(shù)32位-2147483648~2147483647float單精度浮點(diǎn)32位7位

(3.4×10-38~3.4×1038)+、-、*、/、%double雙精度浮點(diǎn)64位16位

(2.23×10-308~1.79×10308)longdouble長(zhǎng)雙精度80位18位±(3.37×10-4932~1.18×104932)17整型類(lèi)型與實(shí)型類(lèi)型

整型就是不帶有小數(shù)點(diǎn)的數(shù)據(jù)類(lèi)型C++還把整型數(shù)分為帶符號(hào)和不帶符號(hào)兩大類(lèi)實(shí)數(shù)一般用小數(shù)形式或科學(xué)記數(shù)法(指數(shù)形式)書(shū)寫(xiě)18C++的轉(zhuǎn)義字符序列序列值字符功能\a0X07BEL警告響鈴\b0X08BS退格\f0X0CFF走紙\n0X0ALF換行\(zhòng)r0X0DCR回車(chē)\t0X09HT水平制表\v0X0BVT垂直制表\\0X5c\反斜杠\'0X27'單引號(hào)\"0X22"雙引號(hào)\?0X3F?問(wèn)號(hào)\o整數(shù)任意0[L1]:最多為3位的八進(jìn)制數(shù)字串\xH整數(shù)任意H:十六進(jìn)制數(shù)字串19字符串字符串常量也稱(chēng)字符串文字或字符串,它們是括在一對(duì)雙撇號(hào)內(nèi)的字符序列字符串常量與字符型常量在內(nèi)部存儲(chǔ)上是不同的20算術(shù)數(shù)據(jù)的類(lèi)型轉(zhuǎn)換在表達(dá)式中,常常會(huì)發(fā)生數(shù)據(jù)類(lèi)型的轉(zhuǎn)換,即將數(shù)據(jù)由一種類(lèi)型轉(zhuǎn)換成另一種類(lèi)型下面介紹這些類(lèi)型轉(zhuǎn)換規(guī)則。 常規(guī)轉(zhuǎn)換 傳送轉(zhuǎn)換 用類(lèi)型運(yùn)算符進(jìn)行顯式轉(zhuǎn)換21例1.1.4#include<iostream.h>intmain(){shortinta=-32768,b,i=1234567890;//i溢出

unsignedshortintua=32768,ub;cout<<"b=ua:"<<(b=ua)<<endl;//注意ua對(duì)int溢出

cout<<"ub=a:"<<(ub=a)<<endl;//注意有符號(hào)負(fù)數(shù)向無(wú)符號(hào)數(shù)轉(zhuǎn)換

cout<<i;}22sizeof運(yùn)算符sizeof是一個(gè)單目運(yùn)算符,用以計(jì)算操作數(shù)在內(nèi)存中占用的字節(jié)數(shù)。它的操作數(shù)可以是以下兩種情況:

括在圓括號(hào)中的類(lèi)型標(biāo)識(shí)符 一個(gè)表達(dá)式sizeof運(yùn)算符具有最高優(yōu)先級(jí),最高優(yōu)先級(jí)中的運(yùn)算符都是從右向左結(jié)合的23例1.1.5#include<iostream.h>intmain()//該程序在16位和32位系統(tǒng)中的運(yùn)行結(jié)果不同!

{cout<<"sizeofunsignedchar:"<<sizeof(unsignedchar)<<endl;cout<<"sizeofchar:"<<sizeof(char)<<endl;cout<<"sizeofunsignedint:"<<sizeof(unsignedint)<<endl;cout<<"sizeofshortint:"<<sizeof(shortint)<<endl;cout<<"sizeofint:"<<sizeof(int)<<endl;cout<<"sizeofunsignedlong:"<<sizeof(unsignedlong)<<endl;cout<<"sizeoflong:"<<sizeof(long)<<endl;cout<<"sizeoffloat:"<<sizeof(float)<<endl;cout<<"sizeofdouble:"<<sizeof(double)<<endl;cout<<"sizeoflongdouble:"<<sizeof(longdouble)<<endl;}24變量與常量程序變量字面常量與符號(hào)常量25程序變量程序變量簡(jiǎn)稱(chēng)變量。變量有以下特點(diǎn):變量指稱(chēng)了程序中使用的一個(gè)被命名存儲(chǔ)區(qū)域(稱(chēng)程序?qū)嶓w),以存放可由程序修改的值,變量在某一時(shí)刻的值稱(chēng)為變量值。變量的名稱(chēng)為變量名。C++規(guī)定變量名由如下三種符號(hào)組成: 大小寫(xiě)字母——可用于變量名的任何位置; 下劃線——可用于變量名的任何位置; 數(shù)字——不能用于變量名的首部。每個(gè)變量應(yīng)屬于一個(gè)特定的類(lèi)型26例1.1.6#include<iostream.h>intmain(){inti; //聲明i為整型

i=3; //給變量i賦值3cout<<"Thefirst\"i\"is:"<<i<<endl;i=5; //給變量i再賦值5cout<<"Thesecond\"i\"is:"<<i<<endl;cout<<"Enteranumber:";cin>>i; //由鍵盤(pán)給變量i輸入一個(gè)值

cout<<"\nThelast\"i\"is:"<<i<<endl;}27字面常量與符號(hào)常量常量可以是字面常量(也稱(chēng)直接常量)或符號(hào)常量。前面使用的基本上都是字面常量下面介紹兩種符號(hào)常量: (1)用const定義的符號(hào)常量 (2)用宏定義模擬符號(hào)常量28例1.1.7/******************************程序名:area_circum**功能:計(jì)算圓的面積與周長(zhǎng)*******************************/#include<iostream.h>intmain(){floatfArea,fCircum;fArea=3.1415926*2.0*2.0;cout<<"Theareais:"<<fArea<<endl;fCircum=3.1415926*2.0*2.0;cout<<"Thecircumis:"<<fCircum<<endl;}29用宏定義模擬符號(hào)常量#include<iostream.h>#definePi3.1415926 //定義宏#definer2.0 //定義宏

intmain(){floatfArea,fCircum;fArea=Pi*r*r; //引用宏

cout<<"Theareais:"<<fArea<<endl;fCircum=2.0*Pi*r; //引用宏

cout<<"Thecircumferenceis:"<<fCircum<<endl;}30函數(shù)函數(shù)的意義與用法函數(shù)定義與函數(shù)結(jié)構(gòu)函數(shù)原型與函數(shù)聲明函數(shù)調(diào)用與內(nèi)聯(lián)函數(shù)傳值調(diào)用與引用類(lèi)型庫(kù)函數(shù)應(yīng)用31函數(shù)的意義與用法函數(shù)是C++程序中組織過(guò)程的機(jī)制。它對(duì)較大的程序比較有效。這里,主要介紹函數(shù)的用法,因此仍然使用前面介紹過(guò)的求圓的面積的例子,只不過(guò)用函數(shù)的形式來(lái)描述32例1.2.1#include<iostream.h>#definePi3.1415926 intmain(){floatflR=1.2,fArea;floatArea(float); //函數(shù)聲明fArea=Area(flR); //函數(shù)調(diào)用cout<<"Theareais:"<<fArea<<endl;}floatArea(floatfR) //定義求圓面積的函數(shù){ return(Pi*fR*fR);}33C++程序的一般結(jié)構(gòu)系統(tǒng)調(diào)用返回系統(tǒng)f1()f11(){④{↓③↓⑤main()②f11();⑥}{↓⑦↓①}f21()f1();⑧{↓⑨f2()12↓13f2();10{}↓21↓1114}f21();f22()20↓1516{f22();↓17↓1918}}34函數(shù)定義與函數(shù)結(jié)構(gòu)一個(gè)C++函數(shù)的定義由函數(shù)頭與函數(shù)體兩部分組成,形式如下:

函數(shù)首部

{

函數(shù)體

}35函數(shù)首部函數(shù)首部是函數(shù)的接口部分,其組成形式如下:

類(lèi)型名

函數(shù)名(形式參數(shù)表列)函數(shù)類(lèi)型規(guī)定為函數(shù)返回值的類(lèi)型函數(shù)名是函數(shù)的標(biāo)識(shí),它應(yīng)是一個(gè)有效的C++標(biāo)識(shí)符形式參數(shù)表列是括在園括號(hào)中的0個(gè)或多個(gè)以逗號(hào)分隔的形式參數(shù)36函數(shù)體一個(gè)函數(shù)體是一個(gè)語(yǔ)句塊,是用一對(duì)花括號(hào)封裝的語(yǔ)句序列。它描述了函數(shù)實(shí)現(xiàn)一個(gè)功能的過(guò)程。它最后執(zhí)行一個(gè)函數(shù)返回,返回的作用是: 將流程從當(dāng)前函數(shù)返回其上級(jí)(調(diào)用函數(shù)); 撤銷(xiāo)函數(shù)調(diào)用時(shí)為各參數(shù)及變量分配的內(nèi)存空間; 向調(diào)用函數(shù)返回頂多一個(gè)值37例1.2.2voidArea(floatfR) //定義求圓面積的函數(shù){cout<<"Theareais:"<<(Pi*fR*fR)<<endl;return;}或voidArea(floatfR) //定義求圓面積的函數(shù){cout<<"Theareais:"<<(Pi*fR*fR)<<endl;return;}38主函數(shù)main()main()函數(shù)是一個(gè)特殊的函數(shù)。它的名字是固定的。它可看作是由操作系統(tǒng)調(diào)用的一個(gè)函數(shù)。其返回值可以是void型或int型(可以缺?。.?dāng)其返回值為int型時(shí),用0或非0,告訴操作系統(tǒng)程序是否正常結(jié)束39例1.2.3

#include<iostream.h>main(){cout<<"ok!";return(0);}40函數(shù)原型函數(shù)原型也稱(chēng)函數(shù)模型,是由函數(shù)定義中抽取出來(lái)的能代表函數(shù)應(yīng)用特征的部分:

·

函數(shù)類(lèi)型

·

函數(shù)名

·

參數(shù)個(gè)數(shù)及其類(lèi)型函數(shù)原型的形式為:類(lèi)型函數(shù)名(參數(shù)類(lèi)型1,參數(shù)類(lèi)型2,…,參數(shù)類(lèi)型n)41函數(shù)提前聲明當(dāng)函數(shù)定義在前調(diào)用在后時(shí),編譯器在調(diào)用函數(shù)之前,能從其定義中抽取函數(shù)原型當(dāng)函數(shù)調(diào)用在前定義在后時(shí),要求程序員在調(diào)用之前用函數(shù)原型對(duì)函數(shù)進(jìn)行聲明,以便編譯器從中得到函數(shù)原型所提供的有關(guān)信息函數(shù)聲明中的參數(shù)名對(duì)編譯器沒(méi)有意義42函數(shù)調(diào)用與內(nèi)聯(lián)函數(shù)函數(shù)調(diào)用的作用是:

·

用實(shí)參數(shù)(如例1.2.1中的nR)向形式參數(shù)(如例1.2.1中的fR)傳遞數(shù)據(jù);

·

中斷現(xiàn)行(調(diào)用)函數(shù),把流程轉(zhuǎn)向(被調(diào)用)函數(shù)的入口處,開(kāi)始執(zhí)行被調(diào)函數(shù)在調(diào)用與返回過(guò)程中,需要付出一定的時(shí)間與空間代價(jià)用于處理現(xiàn)場(chǎng)。當(dāng)函數(shù)較小,又反復(fù)使用時(shí),處理現(xiàn)場(chǎng)的開(kāi)銷(xiāo)比重會(huì)急劇增大。若把函數(shù)體嵌入函數(shù)調(diào)用處,便可以大大提高運(yùn)行速度,節(jié)省開(kāi)銷(xiāo)。內(nèi)聯(lián)函數(shù)就可以自動(dòng)實(shí)現(xiàn)這一功能43例1.2.4#include<iostream.h>#definePi3.1415926 intmain(){floatfR1=1.2,fR1=2.3,fArea;floatArea(float); //函數(shù)原型聲明fArea=Area(fR1); //函數(shù)調(diào)用1cout<<"Theareais:"<<fArea<<endl;fArea=Area(fR2); //函數(shù)調(diào)用2cout<<"Theareais:"<<fArea<<endl;}floatArea(floatfR) { return(Pi*fR*fR);}44例1.2.5#include<iostream.h>#definePi3.1415926 intmain(){floatfR1=1.2,fR1=2.3;floatArea(float); //函數(shù)原型聲明cout<<"Theareais:"<<Area(fR1)<<endl;//函數(shù)調(diào)用1cout<<"Theareais:"<<Area(fR2)<<endl;//函數(shù)調(diào)用2}floatArea(floatfR) { return(Pi*fR*fR);}45例1.2.6#include<iostream.h>#definePi3.1415926 intmain(){floatflR=1.2,fArea;inlinefloatArea(float); //內(nèi)聯(lián)函數(shù)以聲明為主fArea=Area(flR); cout<<"Theareais:"<<fArea<<endl;}inlinefloatArea(floatfR) //定義內(nèi)聯(lián)函數(shù){ return(Pi*fR*fR);}46內(nèi)聯(lián)函數(shù)定義方法一種是將函數(shù)定義內(nèi)嵌在類(lèi)的接口中一種是定義在類(lèi)接口的外部注意,由于編譯器必須知道內(nèi)聯(lián)函數(shù)的函數(shù)體才能進(jìn)行內(nèi)聯(lián)替換,因此,內(nèi)聯(lián)函數(shù)在程序中被調(diào)用之前,必須被編譯器看見(jiàn),即內(nèi)聯(lián)函數(shù)必須在調(diào)用之前定義或聲明47傳值調(diào)用與引用類(lèi)型傳值調(diào)用(即“值傳遞”)是C++函數(shù)調(diào)用的重要特征,即調(diào)用函數(shù)向被調(diào)用函數(shù)傳送的是參數(shù)值引用(reference)。這一概念的引入,大大簡(jiǎn)化了許多語(yǔ)法規(guī)則,并使得一些本來(lái)困難或不可能的實(shí)體操作成為可能48例1.2.7#include<iostream.h>

intmain()

{

intx=3,y=5;

cout<<"Befor\'swap\':x="<<x<<",y="<<y<<endl;voidswap(int,int);swap(x,y);cout<<"After\'swap\':x="<<x<<",y="<<y<<endl;}

voidswap(inta,intb){inttemp;temp=a;a=b;b=temp;cout<<"In\'swap\':a="<<a<<",b="<<b<<endl;}49例1.2.8#include<iostream.h>intmain(){inti=5;int&ri1=i;cout<<"i="<<i<<",ri1="<<ri1<<endl;i*=3; //改寫(xiě)變量cout<<"i="<<i<<",ri1="<<ri1<<endl;ri1+=5; //改寫(xiě)引用cout<<"i="<<i<<",ri1="<<ri1<<endl;}50例1.2.9#include<iostream.h>intmain(){inti=5;int&ril=i;cout<<"&i="<<&i<<",&ril="<<&ril<<endl; //&為求地址運(yùn)算符

}51引用參數(shù)的swap()函數(shù)#include<iostream.h>intmain(){intx=3,y=5;voidswap(int&,int&);//引用參數(shù)

swap(x,y);cout<<"x="<<x<<",y="<<y<<endl;}voidswap(int&n1,int&n2){inttemp=n1;n1=n2;n2=temp;}52庫(kù)函數(shù)應(yīng)用庫(kù)函數(shù)是C++廠商收集的一些成熟的函數(shù),以供用戶“拿來(lái)就用”。程序員使用庫(kù)函數(shù)無(wú)須再自行定義,只要注意事先了解以下3點(diǎn)便可:

·

函數(shù)的功能;

·

函數(shù)的原型——函數(shù)名、參數(shù)個(gè)數(shù)及類(lèi)型、返回類(lèi)型,以便正確調(diào)用;

·

使用庫(kù)函數(shù)所需的頭文件——其中有函數(shù)原型聲明。程序員使用庫(kù)函數(shù)之前只需在程序中使用#include指令嵌入相應(yīng)的頭文件而不必再進(jìn)行函數(shù)的原型說(shuō)明53例1.2.12#include<iostream.h>#include<math.h>//嵌入數(shù)學(xué)函數(shù)庫(kù)頭文件

intmain(){floatf;cout<<"Enterarealnumber:";cin>>f; cout<<"Thesqnarerootof“<<f<<”is:”<<sqrt(f)<<endl; //sqrt是數(shù)學(xué)函數(shù)庫(kù)math中的一個(gè)庫(kù)函數(shù)

}5415個(gè)標(biāo)準(zhǔn)頭文件文件名功能文件名功能assert.h程序斷言診斷signal.h中斷信號(hào)處理ctype.h字符處理stdarg.h可變參數(shù)的宏處理errno.h報(bào)告庫(kù)函數(shù)出錯(cuò)stddef.h公共定義float.h實(shí)型類(lèi)型的特征參數(shù)stdio.hI/O函數(shù)庫(kù)limit.h整型量大小的限制參數(shù)stdlib.h常用函數(shù)庫(kù)local.h地方特征string.h字符串處理math.h數(shù)學(xué)函數(shù)庫(kù)time.h日期與時(shí)間函數(shù)庫(kù)setjmp.h非局部跳轉(zhuǎn)55類(lèi)與對(duì)象一個(gè)簡(jiǎn)單的面向?qū)ο蟮睦宇?lèi)的定義與實(shí)現(xiàn)對(duì)象的生成與構(gòu)造函數(shù)對(duì)象的撤銷(xiāo)與釋放函數(shù)友元56一個(gè)簡(jiǎn)單的面向?qū)ο蟮睦右粋€(gè)面向?qū)ο蟮腃++程序由三部分組成:

·

類(lèi)接口的定義;

·

主函數(shù)的編寫(xiě);

·

類(lèi)的實(shí)現(xiàn)——

成員函數(shù)的定義57面向?qū)ο蟮某绦蛎枋龅膱A#include<iostream.h>#definePi3.1415926classCircle{ //定義一個(gè)Circle類(lèi),描述了抽象的圓

private: //私有成員

floatmfR; //數(shù)據(jù)成員:半徑

public:Circle(floatfR); //成員函數(shù):構(gòu)造函數(shù)

voidOutputArea(); //成員函數(shù):求面積

voidOutputCircum(); //成員函數(shù):求周長(zhǎng)};58intmain() //進(jìn)行具體的計(jì)算{Circlea(1.23),b(5.67); //聲明兩個(gè)Circle類(lèi)對(duì)象a和ba.OutputArea(); //輸出對(duì)象a的面積

a.OutputCircum(); //輸出對(duì)象a的周長(zhǎng)

b.OutputArea(); //輸出對(duì)象b的面積

b.OutputCircum(); //輸出對(duì)象b的周長(zhǎng)}Circle::Circle(floatfR) //構(gòu)造函數(shù)定義{mfR=fR;}voidCircle::OutputArea() //成員函數(shù)OutputArea()的定義{cout<<"Theareais:"<<Pi*mfR*mfR<<endl;}voidCircle::OutputCircum() //成員函數(shù)OutputCircum()的定義{cout<<"Thecircumferenceis:"<<2.0*Pi*mfR<<endl;}59類(lèi)的定義與實(shí)現(xiàn)類(lèi)的定義包含兩部分:

·

數(shù)據(jù)成員:描述某類(lèi)對(duì)象的屬性;

·

成員函數(shù):描述某類(lèi)對(duì)象的行為和變化等私有成員不允許外界直接訪問(wèn),只能由本類(lèi)的成員函數(shù)訪問(wèn)。外界與對(duì)象間的信息傳送只能通過(guò)公開(kāi)成員進(jìn)行,數(shù)據(jù)成員是對(duì)象隱藏的部分,由關(guān)鍵詞private說(shuō)明為私有的由關(guān)鍵詞public說(shuō)明為公開(kāi)的,信息隱藏是面向?qū)ο蟪绦蛟O(shè)計(jì)的基本原則,它將外界不需要知道的信息都隱藏起來(lái),以減少程序設(shè)計(jì)的復(fù)雜性。因此默認(rèn)的成員都是私有的,即當(dāng)私有成員放在類(lèi)接口的開(kāi)頭部分時(shí),關(guān)鍵詞private可以缺省60定義內(nèi)聯(lián)成員函數(shù)的方法將成員函數(shù)直接定義在類(lèi)的定義中將成員函數(shù)定義在類(lèi)定義之外時(shí)使用關(guān)鍵字inline61成員函數(shù)直接定義在類(lèi)的定義中#include<iostream.h>#definePi3.1415926classCircle{ private: floatmfR; public:voidCircle::OutputArea()//內(nèi)聯(lián)OutputArea(){cout<<"Theareais:"<<Pi*mfR*mfR<<endl;}voidCircle::OutputCircum() //內(nèi)聯(lián)OutputCircum(){cout<<"Thecircumferenceis:"<<2.0*Pi*mfR<<endl;}};62成員函數(shù)定義在類(lèi)定義之外時(shí)使用關(guān)鍵字inline

#include<iostream.h>#definePi3.1415926classCircle{ private: floatmfR; public: voidOutputArea(); voidOutputCircum(); };inlinevoidCircle::OutputArea()//內(nèi)聯(lián)的OutputArea()定義{cout<<"Theareais:"<<Pi*mfR*mfR<<endl;}inlinevoidCircle::OutputCircum() //內(nèi)聯(lián)的OutputCircum()定義{cout<<"Thecircumferenceis:"<<2.0*Pi*mfR<<endl;}63對(duì)象的生成與構(gòu)造函數(shù)創(chuàng)建對(duì)象時(shí),要做的工作是:

·

給對(duì)象一個(gè)標(biāo)識(shí)符;

·

給對(duì)象開(kāi)辟一個(gè)內(nèi)存空間;

·

將對(duì)象中的成員數(shù)據(jù)初始化64構(gòu)造函數(shù)的特點(diǎn)構(gòu)造函數(shù)具有特定名字──與類(lèi)名相同。如類(lèi)Circle的構(gòu)造函數(shù)名也為Circle。構(gòu)造函數(shù)不能標(biāo)以返回類(lèi)型。它的返回值是隱含的,是指向類(lèi)本身的值。因此在例1.3.1中定義的構(gòu)造函數(shù)沒(méi)有返回類(lèi)型。構(gòu)造函數(shù)也可以定義為內(nèi)聯(lián)函數(shù)當(dāng)系統(tǒng)執(zhí)行對(duì)象聲明語(yǔ)句時(shí),構(gòu)造函數(shù)會(huì)被自動(dòng)調(diào)用,去初始化被聲明的對(duì)象刪除構(gòu)造函數(shù)允許參數(shù)缺省調(diào)用65對(duì)象的撤銷(xiāo)與釋放函數(shù)釋放函數(shù)在對(duì)象撤銷(xiāo)時(shí)被自動(dòng)調(diào)用,用于執(zhí)行一些清理任務(wù),如釋放由構(gòu)造函數(shù)分配的內(nèi)存等釋放函數(shù)有如下一些特點(diǎn):

·

與類(lèi)同名,之前冠以波浪號(hào),以區(qū)別于構(gòu)造函數(shù);

·

不指定返回類(lèi)型;

·

不能指定參數(shù)。66友元用friend聲明了的外部函數(shù)稱(chēng)為這個(gè)類(lèi)的友元函數(shù)元函數(shù)的使用有三個(gè)要點(diǎn):

·

在類(lèi)定義中用關(guān)鍵字friend聲明;

·

在類(lèi)定義之外定義;

·

使用類(lèi)對(duì)象引用作參數(shù)。外部友元函數(shù)的作用域是所在類(lèi)的類(lèi)作用域友元函數(shù)不僅可以訪問(wèn)對(duì)象的公開(kāi)成員,而且可以訪問(wèn)對(duì)象的私有成員67友元函數(shù)是另一個(gè)類(lèi)的成員函數(shù)友元函數(shù)作為一個(gè)類(lèi)的成員函數(shù)時(shí),除應(yīng)當(dāng)在它所在的類(lèi)定義中聲明之外,還應(yīng)當(dāng)在另一個(gè)類(lèi)中聲明它的友元關(guān)系友元函數(shù)既可以引用本類(lèi)對(duì)象的私有成員,這時(shí)毋須本類(lèi)對(duì)象的引用參數(shù);還可以引用聲明它是友元的類(lèi)對(duì)象中的私有成員,這時(shí)必須有友員類(lèi)對(duì)象的引用參數(shù)一個(gè)類(lèi)的成員函數(shù)作另一個(gè)類(lèi)的友元函數(shù)時(shí),必須先定義它,而不僅僅是聲明它68友元關(guān)系classx{private:

成員1…………public:pf();……}classx{private:

成員1……public:pf();friendf();……}f();f();可以訪問(wèn)可以訪問(wèn)不可訪問(wèn)聲明友元關(guān)系可以訪問(wèn)可以訪問(wèn)69例1.3.2#include<iostream.h>#include<string.h>classGirl{char*name,*dial;public:Girl(char*n,char*d){name=newchar[strlen(n)+1];strcpy(name,n);dial=newchar[strlen(d)+1];strcpy(dial,d);}friendvoiddisp(Girl&);//聲明友元函數(shù)

~Girl(){deletename;deletedial;}};voiddisp(Girl&x)//定義外部友元函數(shù),不是定義成員函數(shù)

{cout<<"Girl\'snameis:"<<;<<",tel:"<<x.dial<<"\n";}main(void){Girle("Eluza",);

disp(e);//調(diào)用友元函數(shù)

}70C++程序開(kāi)發(fā)過(guò)程與環(huán)境C++程序開(kāi)發(fā)的基本過(guò)程C++的版本71C++程序開(kāi)發(fā)的基本過(guò)程計(jì)算機(jī)由硬件和軟件兩部分組成。硬件是計(jì)算機(jī)的物理組成,包括一些電路板、電子元件、接插件以及電源、外殼等。光有硬件,計(jì)算機(jī)還不能工作。計(jì)算機(jī)的工作是由程序控制的。程序是對(duì)計(jì)算機(jī)完成工作的成員函數(shù)的描述72一個(gè)程序的開(kāi)發(fā)需要經(jīng)過(guò)如下步驟1.分析問(wèn)題,建立問(wèn)題的模型2.表現(xiàn)模型3.程序的編譯(或解釋?zhuān)┡c連接4.程序的測(cè)試與調(diào)試5.程序的維護(hù)73表現(xiàn)模型表現(xiàn)模型就是用一種符號(hào)系統(tǒng)——語(yǔ)言來(lái)描述模型?;蛘哒f(shuō)是用一種語(yǔ)言來(lái)寫(xiě)程序。這種語(yǔ)言就稱(chēng)為程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)語(yǔ)言分為低級(jí)語(yǔ)言(面向機(jī)器的語(yǔ)言)和高級(jí)語(yǔ)言兩大類(lèi)高級(jí)程序設(shè)計(jì)語(yǔ)言可分為面向過(guò)程的程序設(shè)計(jì)語(yǔ)言和面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言兩大類(lèi)74程序測(cè)試的正確指導(dǎo)思想以任何程序都存在錯(cuò)誤為前提測(cè)試的目的是找出程序中的錯(cuò)誤,而不是證明程序的正確為了保證測(cè)試成功,需要很好地設(shè)計(jì)一組測(cè)試用例,試運(yùn)行程序一般說(shuō)來(lái),測(cè)試不可能是完全的,成功的測(cè)試是能夠找出更多的錯(cuò)誤的測(cè)試75維護(hù)程序的原因

原來(lái)的程序沒(méi)有完全滿足用戶要求;用戶要求的改變;程序中遺留有錯(cuò)誤,在運(yùn)行中被發(fā)現(xiàn)76程序開(kāi)發(fā)的一般過(guò)程提出問(wèn)題分析問(wèn)題建立模型表現(xiàn)模型編輯源程序編譯連接測(cè)試與調(diào)試運(yùn)行維護(hù)錯(cuò)誤目標(biāo)文件可執(zhí)行文件未發(fā)現(xiàn)錯(cuò)誤源程序文件源程序代碼模型問(wèn)題編輯錯(cuò)誤建模錯(cuò)誤分析錯(cuò)誤不再適宜77C++的版本C++是以C語(yǔ)言為基礎(chǔ)擴(kuò)充、發(fā)展起來(lái)的一種優(yōu)秀的通用程序設(shè)計(jì)語(yǔ)言。它保持了C語(yǔ)言的緊湊、靈活、高效和移植性好的優(yōu)點(diǎn),又吸收了一些著名程序設(shè)計(jì)語(yǔ)言的優(yōu)秀特性:從Simula中吸收了類(lèi)的機(jī)制;從ALGOL68中吸收了運(yùn)算符重載、引用和在局部的任何地方聲明變量;綜合了Ada的類(lèi)屬和異常處理機(jī)制

算法設(shè)計(jì)與程序結(jié)構(gòu)判斷與選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)常用算法設(shè)計(jì)變量的存儲(chǔ)屬性多文件程序結(jié)構(gòu)判斷與選擇結(jié)構(gòu)關(guān)系運(yùn)算與邏輯運(yùn)算if…else結(jié)構(gòu)條件運(yùn)算符與條件表達(dá)式elseif結(jié)構(gòu)

switch結(jié)構(gòu)關(guān)系運(yùn)算與邏輯運(yùn)算關(guān)系運(yùn)算符與關(guān)系表達(dá)式邏輯運(yùn)算符與邏輯表達(dá)式關(guān)系運(yùn)算符

<(小于)<=(小于等于)

>(大于)>=(大于等于)==等于)!=(不等于)關(guān)系運(yùn)算符特點(diǎn)關(guān)系運(yùn)算的結(jié)果為邏輯型“==”與“!=”兩種關(guān)系運(yùn)算符的優(yōu)先級(jí)比其它關(guān)系運(yùn)算符的優(yōu)先級(jí)別略低邏輯運(yùn)算符

&&(邏輯“與”)

||(邏輯“或”)?。ㄟ壿嫛胺恰保┻\(yùn)算符優(yōu)先級(jí)比較優(yōu)先級(jí)運(yùn)

符結(jié)合方向()后置++后置--→!前置++后置---*(間接引用)&(取地址)←*/%→+-…<<=>>===!=…&&||…←=+=-=*=/=%=

if…else結(jié)構(gòu)if…else結(jié)構(gòu)的基本形式為:

if(判斷表達(dá)式)

語(yǔ)句1 else

語(yǔ)句2例程include<iostream.h>classThreeNumber{ intm1,m2,m3;public: voidInput3Integers();

voidGetMax();}; intmain(){ThreeNumbera;a.Input3Integers();a.GetMax();return0;}

兩個(gè)成員函數(shù)的實(shí)現(xiàn)voidThreeNumber::Input3Integers(){cout<<“Input3Integers:\n”;cin>>m1>>m2>>m3;}intThreeNumber::GetMax(){intmax;if(m1>m2) if(m1>m3) max=m1; else max=m3;else if(m2>m3) max=m2; else max=m3;cout<<“TheMaxintegeris:”<<max<<endl;}條件運(yùn)算符與條件表達(dá)式條件表達(dá)式的一般形式為:

e1?e2:e3

elseif結(jié)構(gòu)if(判斷表達(dá)式1)

語(yǔ)句1elseif(表達(dá)式2)

語(yǔ)句2…elseif(表達(dá)式n)

語(yǔ)句nelse

語(yǔ)句n+1switch結(jié)構(gòu)

switch(開(kāi)關(guān)表達(dá)式){case常量1:

語(yǔ)句表列

case常量2:

語(yǔ)句表列

…default:

語(yǔ)句表列

}

switch結(jié)構(gòu)描述例程voidCharacter::GetClass(){switch(mCh){ case'0':case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':cout<<"\nIt'sadigitcharacter.";break;case'':case'\n':case'\t':cout<<"\nIt'sawhitecharacter.";break;default:cout<<"\nIt'salettercharacter.";break;}}循環(huán)結(jié)構(gòu)for結(jié)構(gòu)

while結(jié)構(gòu)與do…while結(jié)構(gòu)for結(jié)構(gòu)結(jié)構(gòu)的基本形式為:

for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

循環(huán)體高斯(Gauss)問(wèn)題#include<iostream.h>classGauss{ intmi;public: InputInteger(); GetGaussSum();};intmain(){ Gaussg1; g1.InputInteger(); g1.GetGaussSum(); return0;}voidGauss::InputInteger(){cout<<"Enteracharacter:\n";cin>>mi;}voidGauss::GetGaussSum(){inti,isum=0;for(i=1;i<=mi;i++)

isum+=i;cout<<"\nThesumis:"<<isum;}

for結(jié)構(gòu)的流程for(初始化表達(dá)式;→判斷表達(dá)式;←修正表達(dá)式)↓”真”循環(huán)體進(jìn)入循環(huán)退出循環(huán)假while結(jié)構(gòu)while結(jié)構(gòu)的一般形式:

while(判斷表達(dá)式)

循環(huán)體語(yǔ)句進(jìn)一步說(shuō)明表達(dá)式是循環(huán)體語(yǔ)句能否進(jìn)行以及能否繼續(xù)的條件。也就是說(shuō),在進(jìn)入循環(huán)之前,先測(cè)試一次判斷表達(dá)式,如果判斷表達(dá)式為真(值不為0),則就進(jìn)入循環(huán),開(kāi)始執(zhí)行循環(huán)體語(yǔ)句;以后每執(zhí)行完一次循環(huán)體語(yǔ)句,就再測(cè)試一次判斷表達(dá)式,如果判斷表達(dá)式還為“真”(值不為0),就繼續(xù)執(zhí)行循環(huán)體語(yǔ)句;如此重復(fù),直到某一次循環(huán)體語(yǔ)句執(zhí)行完,判斷表達(dá)式變?yōu)椤凹佟敝羋o…while結(jié)構(gòu)do…while結(jié)構(gòu)形式為:

do

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

while(判斷表達(dá)式);進(jìn)一步說(shuō)明do…while結(jié)構(gòu)與while結(jié)構(gòu)非常相似,一點(diǎn)微小的區(qū)別僅在于while結(jié)構(gòu)是先判斷后執(zhí)行循環(huán)體,而do…while結(jié)構(gòu)是先執(zhí)行一次循環(huán)體再判斷。也就是說(shuō),do…while結(jié)構(gòu)最少要執(zhí)行循環(huán)體一次,而while結(jié)構(gòu)有可能一次也不執(zhí)行循環(huán)體常用算法設(shè)計(jì)窮舉遞推模擬遞歸窮舉窮舉歸納是數(shù)學(xué)上最常用的方法之一它的基本思想是一一列舉各種可能進(jìn)行測(cè)試,從中找出符合條件的解計(jì)算機(jī)能夠?qū)崿F(xiàn)高速運(yùn)算,借循環(huán)結(jié)構(gòu)實(shí)現(xiàn)窮舉,比人工更為有效大獎(jiǎng)賽評(píng)分程序#include<iostream.h>classScore{ intmNumber_Adjudicator; //評(píng)委人數(shù)

public: Score(intiNum_Adj) { mNumber_Adjudicator=iNum_Adj; } voidGetResult(); //計(jì)算并給出結(jié)果};intmain(){ Scorem(15); //假定有15個(gè)評(píng)委

m.GetResult(); return0;}voidScore::GetResult(){ intiScore, //每個(gè)評(píng)委的給分

i, //臨時(shí)變量

max, //最高分

min; //最低分

max=0; //先假設(shè)當(dāng)前最大分為0 min=100; //先假設(shè)當(dāng)前最小分為最大分(100)

floatfSum=0; //均分

for(i=1;i<=mNumber_Adjudicator;i++){ cout<<"\n輸入第“

<<i<<“個(gè)分”; cin>>iScore; //輸入評(píng)委評(píng)分

fSum+=iScore; //計(jì)算總分

if(score>max)max=score; //篩選最高分

if(score<min)min=score; //篩選最低分

}cout<<"\n均分為"<<(fSum-max-min)/(mNumber_Adjudicator-2));}打印3~N中的素?cái)?shù)#include<iostream.h>classPrimer{ intmNumber; public: Primer(intn) { mNumber=n; } void GetPrimers();};intmain(){ Primer n(m); n.GetPrimers(); return0;}36塊磚,36人搬classRemoveBricks{ intiNumberOfPeople; intiNumberOfBrick; public: RemoveBrick(intiNumPeop,intiNumBrc)//構(gòu)造函數(shù)

{ iNumberOfPeople=iNumPeop; iNumberOfBrick=iNumBrc;} voidCalculate();};

intmain(){ BrickProblem rb(36,36);//用構(gòu)造函數(shù)創(chuàng)建對(duì)象并初始化

rb.Calculate(); //調(diào)用對(duì)象的成員函數(shù)進(jìn)行計(jì)算

return0;}

函數(shù)Calculate()#include<iostream.h>voidBrickProblem::Calculate(){cout<<"men*****women***children\n");intmen=0; //賦初值

while(men++<iNumberOfPeople/4) //修訂并判斷

{ intwomen=0; //賦初值

while(women++<iNumberOfPeople/3) //修訂并判斷

{intchildren;children=iNumberOfPeople–men-women;if(4*men+3*women+children/2==iNumberOfBrick) { cout.width(6); //設(shè)置輸出域?qū)?/p>

cout<<men<<women<<children;}}}}遞推遞推就是采用不斷由已知推出新值,直到求得解為止

求兩個(gè)非負(fù)整數(shù)的最大公因子#include<iostream.h>

溫馨提示

  • 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)論