




版權(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++程式運算符與運算式數(shù)據(jù)類型變數(shù)與常量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ù),是三個存儲數(shù)據(jù)的空間的名字“cout”稱為標(biāo)準(zhǔn)輸出設(shè)備,通常指顯示器“cin”稱為標(biāo)準(zhǔn)輸入設(shè)備,通常指鍵盤“endl”表示換行“#include”稱為檔包含7運算符與運算式運算符是一種程式記號,它作用於運算元而觸發(fā)某種操作由運算符和運算元組成的符號序列,就稱為運算式8最基本的運算符算術(shù)運算符賦值運算符複合賦值運算符9運算符在運算式中的運算順序運算符的優(yōu)先順序別運算符與運算元的結(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++與--有兩種使用形式首碼形式,即它們在運算元前,如++x,--x尾碼形式,即它們在運算元後,如x++,x--++運算式與--運算式獨立使用時,首碼形式與尾碼形式無區(qū)別,但它們在運算式中被引用時,結(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ī)範(fàn)化為數(shù)據(jù)分配相應(yīng)大小的存儲空間;確定數(shù)據(jù)值的範(fàn)圍;確定數(shù)據(jù)的表示精度;確定數(shù)據(jù)可以進(jìn)行的運算種類。16最常用的數(shù)據(jù)類型的比較數(shù)據(jù)類型關(guān)鍵字意義存儲空間表數(shù)精度(有效數(shù)字)表數(shù)範(fàn)圍運算類型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水準(zhǔn)製錶\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)換在運算式中,常常會發(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是一個單目運算符,用以計算運算元在內(nèi)存中佔用的位元組數(shù)。它的運算元可以是以下兩種情況:
括在圓括號中的類型識別字 一個運算式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變數(shù)與常量程式變數(shù)字面常量與符號常量25程式變數(shù)程式變數(shù)簡稱變數(shù)。變數(shù)有以下特點:變數(shù)指稱了程式中使用的一個被命名存儲區(qū)域(稱程式實體),以存放可由程式修改的值,變數(shù)在某一時刻的值稱為變數(shù)值。變數(shù)的名稱為變數(shù)名。C++規(guī)定變數(shù)名由如下三種符號組成: 大小寫字母——可用於變數(shù)名的任何位置; 下劃線——可用於變數(shù)名的任何位置; 數(shù)字——不能用於變數(shù)名的首部。每個變數(shù)應(yīng)屬於一個特定的類型26例1.1.6#include<iostream.h>intmain(){inti; //聲明i為整型
i=3; //給變數(shù)i賦值3cout<<"Thefirst\"i\"is:"<<i<<endl;i=5; //給變數(shù)i再賦值5cout<<"Thesecond\"i\"is:"<<i<<endl;cout<<"Enteranumber:";cin>>i; //由鍵盤給變數(shù)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++程式中組織過程的機制。它對較大的程式比較有效。這裏,主要介紹函數(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++識別字形式參數(shù)表列是括在園括弧中的0個或多個以逗號分隔的形式參數(shù)36函數(shù)體一個函數(shù)體是一個語句塊,是用一對花括弧封裝的語句序列。它描述了函數(shù)實現(xiàn)一個功能的過程。它最後執(zhí)行一個函數(shù)返回,返回的作用是: 將流程從當(dāng)前函數(shù)返回其上級(調(diào)用函數(shù)); 撤銷函數(shù)調(diào)用時為各參數(shù)及變數(shù)分配的記憶體空間; 向調(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; //改寫變數(shù)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è)計的複雜性。因此默認(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)建對象時,要做的工作是:
·
給對象一個識別字;
·
給對象開闢一個記憶體空間;
·
將對象中的成員數(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ù)分配的記憶體等釋放函數(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ā)的基本過程電腦由硬體和軟體兩部分組成。硬體是電腦的物理組成,包括一些電路板、電子元件、接插件以及電源、外殼等。光有硬體,電腦還不能工作。電腦的工作是由程式控制的。程式是對電腦完成工作的成員函數(shù)的描述72一個程式的開發(fā)需要經(jīng)過如下步驟1.分析問題,建立問題的模型2.表現(xiàn)模型3.程式的編譯(或解釋)與連接4.程式的測試與調(diào)試5.程式的維護(hù)73表現(xiàn)模型表現(xiàn)模型就是用一種符號系統(tǒng)——語言來描述模型。或者說是用一種語言來寫程式。這種語言就稱為程式設(shè)計語言程式設(shè)計語言分為低級語言(面向機器的語言)和高級語言兩大類高級程式設(shè)計語言可分為面向過程的程式設(shè)計語言和麵向?qū)ο蟮某淌皆O(shè)計語言兩大類74程式測試的正確指導(dǎo)思想以任何程式都存在錯誤為前提測試的目的是找出程式中的錯誤,而不是證明程式的正確為了保證測試成功,需要很好地設(shè)計一組測試用例,試運行程式一般說來,測試不可能是完全的,成功的測試是能夠找出更多的錯誤的測試75維護(hù)程式的原因
原來的程式?jīng)]有完全滿足用戶要求;用戶要求的改變;程式中遺留有錯誤,在運行中被發(fā)現(xiàn)76程式開發(fā)的一般過程提出問題分析問題建立模型表現(xiàn)模型編輯根源程式編譯連接測試與調(diào)試運行維護(hù)錯誤目標(biāo)檔可執(zhí)行檔未發(fā)現(xiàn)錯誤根源程式檔根源程式代碼模型問題編輯錯誤建模錯誤分析錯誤不再適宜77C++的版本C++是以C語言為基礎(chǔ)擴充、發(fā)展起來的一種優(yōu)秀的通用程式設(shè)計語言。它保持了C語言的緊湊、靈活、高效和移植性好的優(yōu)點,又吸收了一些著名程式設(shè)計語言的優(yōu)秀特性:從Simula中吸收了類的機制;從ALGOL68中吸收了運算符重載、引用和在局部的任何地方聲明變數(shù);綜合了Ada的類屬和異常處理機制
演算法設(shè)計與程式結(jié)構(gòu)判斷與選擇結(jié)構(gòu)迴圈結(jié)構(gòu)常用演算法設(shè)計變數(shù)的存儲屬性多檔程式結(jié)構(gòu)判斷與選擇結(jié)構(gòu)關(guān)係運算與邏輯運算if…else結(jié)構(gòu)條件運算符與條件運算式elseif結(jié)構(gòu)
switch結(jié)構(gòu)關(guān)係運算與邏輯運算關(guān)係運算符與關(guān)係運算式邏輯運算符與邏輯運算式關(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(判斷運算式)
語句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;}條件運算符與條件運算式條件運算式的一般形式為:
e1?e2:e3
elseif結(jié)構(gòu)if(判斷運算式1)
語句1elseif(運算式2)
語句2…elseif(運算式n)
語句nelse
語句n+1switch結(jié)構(gòu)
switch(開關(guān)運算式){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;}}迴圈結(jié)構(gòu)for結(jié)構(gòu)
while結(jié)構(gòu)與do…while結(jié)構(gòu)for結(jié)構(gòu)結(jié)構(gòu)的基本形式為:
for(運算式1;運算式2;運算式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(初始化運算式;→判斷運算式;←修正運算式)↓”真”循環(huán)體進(jìn)入迴圈退出迴圈假while結(jié)構(gòu)while結(jié)構(gòu)的一般形式:
while(判斷運算式)
循環(huán)體語句進(jìn)一步說明運算式是循環(huán)體語句能否進(jìn)行以及能否繼續(xù)的條件。也就是說,在進(jìn)入迴圈之前,先測試一次判斷運算式,如果判斷運算式為真(值不為0),則就進(jìn)入迴圈,開始執(zhí)行循環(huán)體語句;以後每執(zhí)行完一次循環(huán)體語句,就再測試一次判斷運算式,如果判斷運算式還為“真”(值不為0),就繼續(xù)執(zhí)行循環(huán)體語句;如此重複,直到某一次循環(huán)體語句執(zhí)行完,判斷運算式變?yōu)椤凹佟敝羋o…while結(jié)構(gòu)do…while結(jié)構(gòu)形式為:
do
循環(huán)體語句
while(判斷運算式);進(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)行測試,從中找出符合條件的解電腦能夠?qū)崿F(xià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, //臨時變數(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<<“個分”; 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ù)的最大公因數(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧政法職業(yè)學(xué)院《交互界面原型》2023-2024學(xué)年第二學(xué)期期末試卷
- 西北大學(xué)《傳感器技術(shù)于應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 廈門華天涉外職業(yè)技術(shù)學(xué)院《模擬電子線路綜合》2023-2024學(xué)年第二學(xué)期期末試卷
- 新疆第二醫(yī)學(xué)院《幼兒教育名著選讀》2023-2024學(xué)年第二學(xué)期期末試卷
- 貴州中醫(yī)藥大學(xué)《刑事法律精講》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣西大學(xué)《Access數(shù)據(jù)庫程序設(shè)計》2023-2024學(xué)年第二學(xué)期期末試卷
- (高清版)DG∕TJ 08-2165-2015 建設(shè)項目交通影響評價技術(shù)標(biāo)準(zhǔn)
- 數(shù)字通信原理(第3版)課件 第8章 數(shù)字載波調(diào)制傳輸
- 3 1《蜀道難》導(dǎo)學(xué)案 (含部分答案)統(tǒng)編版高中語文選擇性必修下冊
- 全套三級安全教育培訓(xùn)
- 2025年上半年重慶合川區(qū)招考事業(yè)單位工作人員易考易錯模擬試題(共500題)試卷后附參考答案
- 平安人壽代理合同協(xié)議
- 2025年上海市松江區(qū)中考數(shù)學(xué)二模試卷(含解析)
- 貴州煙草專賣局招聘筆試題庫2025
- 2025年高考語文考前復(fù)習(xí)誦讀材料-13晨讀材料
- 書畫素養(yǎng)測試題及答案
- 鋼琴藝術(shù)培訓(xùn)管理制度
- 校園廣播設(shè)備維保合同
- 反詐宣傳課件小學(xué)生版
- 八年級數(shù)學(xué)上學(xué)期期中期末沖刺卷-特訓(xùn)10 一次函數(shù) 壓軸題(八大母題型歸納)(原卷版)
- 胰腺假性囊腫治療
評論
0/150
提交評論