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

下載本文檔

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

文檔簡介

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

2

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

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

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

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

<<s //輸出s的值

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

return0;}6上例說明C++的注釋符有:“//”后面與“/*”和“*/”之間的“;”是C++語句的結(jié)束符,表明一個語句的結(jié)束x”、“y”和“s”稱為三個變量,是三個存儲數(shù)據(jù)的空間的名字“cout”稱為標(biāo)準(zhǔn)輸出設(shè)備,通常指顯示器“cin”稱為標(biāo)準(zhǔn)輸入設(shè)備,通常指鍵盤“endl”表示換行“#include”稱為文件包含7運算符與表達(dá)式運算符是一種程序記號,它作用于操作數(shù)而觸發(fā)某種操作由運算符和操作數(shù)組成的符號序列,就稱為表達(dá)式8最基本的運算符算術(shù)運算符賦值運算符復(fù)合賦值運算符9運算符在表達(dá)式中的運算順序運算符的優(yōu)先級別運算符與操作數(shù)的結(jié)合方向運算符的先后排列順序10各種運算符間的優(yōu)先級別和結(jié)合性運算符結(jié)合性優(yōu)先級別單目減:-←高低雙目算術(shù)運算符:*/→+-→標(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++與--有兩種使用形式前綴形式,即它們在操作數(shù)前,如++x,--x后綴形式,即它們在操作數(shù)后,如x++,x--++表達(dá)式與--表達(dá)式獨立使用時,前綴形式與后綴形式無區(qū)別,但它們在表達(dá)式中被引用時,結(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ù)類型整型類型與實型類型字符類型字符串算術(shù)數(shù)據(jù)的類型轉(zhuǎn)換sizeof運算符15數(shù)據(jù)的規(guī)范化為數(shù)據(jù)分配相應(yīng)大小的存儲空間;確定數(shù)據(jù)值的范圍;確定數(shù)據(jù)的表示精度;確定數(shù)據(jù)可以進(jìn)行的運算種類。16最常用的數(shù)據(jù)類型的比較數(shù)據(jù)類型關(guān)鍵字意義存儲空間表數(shù)精度(有效數(shù)字)表數(shù)范圍運算類型char字符8位+、-、%short短整數(shù)16位-32768~32767+、-、*、/、%int整數(shù)32位-2147483648~2147483647float單精度浮點32位7位

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

(2.23×10-308~1.79×10308)longdouble長雙精度80位18位±(3.37×10-4932~1.18×104932)17整型類型與實型類型

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

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

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

括在圓括號中的類型標(biāo)識符 一個表達(dá)式sizeof運算符具有最高優(yōu)先級,最高優(yōu)先級中的運算符都是從右向左結(jié)合的23例1.1.5#include<iostream.h>intmain()//該程序在16位和32位系統(tǒng)中的運行結(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變量與常量程序變量字面常量與符號常量25程序變量程序變量簡稱變量。變量有以下特點:變量指稱了程序中使用的一個被命名存儲區(qū)域(稱程序?qū)嶓w),以存放可由程序修改的值,變量在某一時刻的值稱為變量值。變量的名稱為變量名。C++規(guī)定變量名由如下三種符號組成: 大小寫字母——可用于變量名的任何位置; 下劃線——可用于變量名的任何位置; 數(shù)字——不能用于變量名的首部。每個變量應(yīng)屬于一個特定的類型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; //由鍵盤給變量i輸入一個值

cout<<"\nThelast\"i\"is:"<<i<<endl;}27字面常量與符號常量常量可以是字面常量(也稱直接常量)或符號常量。前面使用的基本上都是字面常量下面介紹兩種符號常量: (1)用const定義的符號常量 (2)用宏定義模擬符號常量28例1.1.7/******************************程序名:area_circum**功能:計算圓的面積與周長*******************************/#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用宏定義模擬符號常量#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)用與引用類型庫函數(shù)應(yīng)用31函數(shù)的意義與用法函數(shù)是C++程序中組織過程的機(jī)制。它對較大的程序比較有效。這里,主要介紹函數(shù)的用法,因此仍然使用前面介紹過的求圓的面積的例子,只不過用函數(shù)的形式來描述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)一個C++函數(shù)的定義由函數(shù)頭與函數(shù)體兩部分組成,形式如下:

函數(shù)首部

{

函數(shù)體

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

類型名

函數(shù)名(形式參數(shù)表列)函數(shù)類型規(guī)定為函數(shù)返回值的類型函數(shù)名是函數(shù)的標(biāo)識,它應(yīng)是一個有效的C++標(biāo)識符形式參數(shù)表列是括在園括號中的0個或多個以逗號分隔的形式參數(shù)36函數(shù)體一個函數(shù)體是一個語句塊,是用一對花括號封裝的語句序列。它描述了函數(shù)實現(xiàn)一個功能的過程。它最后執(zhí)行一個函數(shù)返回,返回的作用是: 將流程從當(dāng)前函數(shù)返回其上級(調(diào)用函數(shù)); 撤銷函數(shù)調(diào)用時為各參數(shù)及變量分配的內(nèi)存空間; 向調(diào)用函數(shù)返回頂多一個值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ù)是一個特殊的函數(shù)。它的名字是固定的。它可看作是由操作系統(tǒng)調(diào)用的一個函數(shù)。其返回值可以是void型或int型(可以缺?。?。當(dāng)其返回值為int型時,用0或非0,告訴操作系統(tǒng)程序是否正常結(jié)束39例1.2.3

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

·

函數(shù)類型

·

函數(shù)名

·

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

·

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

·

中斷現(xiàn)行(調(diào)用)函數(shù),把流程轉(zhuǎn)向(被調(diào)用)函數(shù)的入口處,開始執(zhí)行被調(diào)函數(shù)在調(diào)用與返回過程中,需要付出一定的時間與空間代價用于處理現(xiàn)場。當(dāng)函數(shù)較小,又反復(fù)使用時,處理現(xiàn)場的開銷比重會急劇增大。若把函數(shù)體嵌入函數(shù)調(diào)用處,便可以大大提高運行速度,節(jié)省開銷。內(nèi)聯(lián)函數(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)嵌在類的接口中一種是定義在類接口的外部注意,由于編譯器必須知道內(nèi)聯(lián)函數(shù)的函數(shù)體才能進(jìn)行內(nèi)聯(lián)替換,因此,內(nèi)聯(lián)函數(shù)在程序中被調(diào)用之前,必須被編譯器看見,即內(nèi)聯(lián)函數(shù)必須在調(diào)用之前定義或聲明47傳值調(diào)用與引用類型傳值調(diào)用(即“值傳遞”)是C++函數(shù)調(diào)用的重要特征,即調(diào)用函數(shù)向被調(diào)用函數(shù)傳送的是參數(shù)值引用(reference)。這一概念的引入,大大簡化了許多語法規(guī)則,并使得一些本來困難或不可能的實體操作成為可能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; //改寫變量cout<<"i="<<i<<",ri1="<<ri1<<endl;ri1+=5; //改寫引用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; //&為求地址運算符

}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庫函數(shù)應(yīng)用庫函數(shù)是C++廠商收集的一些成熟的函數(shù),以供用戶“拿來就用”。程序員使用庫函數(shù)無須再自行定義,只要注意事先了解以下3點便可:

·

函數(shù)的功能;

·

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

·

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

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

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

·

類接口的定義;

·

主函數(shù)的編寫;

·

類的實現(xiàn)——

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

private: //私有成員

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

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

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

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

a.OutputCircum(); //輸出對象a的周長

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

b.OutputCircum(); //輸出對象b的周長}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類的定義與實現(xiàn)類的定義包含兩部分:

·

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

·

成員函數(shù):描述某類對象的行為和變化等私有成員不允許外界直接訪問,只能由本類的成員函數(shù)訪問。外界與對象間的信息傳送只能通過公開成員進(jìn)行,數(shù)據(jù)成員是對象隱藏的部分,由關(guān)鍵詞private說明為私有的由關(guān)鍵詞public說明為公開的,信息隱藏是面向?qū)ο蟪绦蛟O(shè)計的基本原則,它將外界不需要知道的信息都隱藏起來,以減少程序設(shè)計的復(fù)雜性。因此默認(rèn)的成員都是私有的,即當(dāng)私有成員放在類接口的開頭部分時,關(guān)鍵詞private可以缺省60定義內(nèi)聯(lián)成員函數(shù)的方法將成員函數(shù)直接定義在類的定義中將成員函數(shù)定義在類定義之外時使用關(guān)鍵字inline61成員函數(shù)直接定義在類的定義中#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ù)定義在類定義之外時使用關(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對象的生成與構(gòu)造函數(shù)創(chuàng)建對象時,要做的工作是:

·

給對象一個標(biāo)識符;

·

給對象開辟一個內(nèi)存空間;

·

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

·

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

·

不指定返回類型;

·

不能指定參數(shù)。66友元用friend聲明了的外部函數(shù)稱為這個類的友元函數(shù)元函數(shù)的使用有三個要點:

·

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

·

在類定義之外定義;

·

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

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

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

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

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

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

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

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

&&(邏輯“與”)

||(邏輯“或”)!(邏輯“非”)運算符優(yōu)先級比較優(yōu)先級運

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

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

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

語句1 else

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

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

兩個成員函數(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;}條件運算符與條件表達(dá)式條件表達(dá)式的一般形式為:

e1?e2:e3

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

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

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

語句nelse

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

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

語句表列

case常量2:

語句表列

…default:

語句表列

}

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

do

循環(huán)體語句

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

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

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

i, //臨時變量

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<<“個分”; cin>>iScore; //輸入評委評分

fSum+=iScore; //計算總分

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

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

}cout<<"\n均分為"<<(fSum-max-min)/(mNumber_Adjudicator-2));}打印3~N中的素數(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)建對象并初始化

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

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;}}}}遞推遞推就是采用不斷由已知推出新值,直到求得解為止

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

溫馨提示

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

評論

0/150

提交評論