




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C++語言程式設(shè)計(jì)第1講:緒論/5低級(jí)語言與高級(jí)語言面向機(jī)器的語言是低級(jí)語言;面向使用者的語言是高級(jí)語言。機(jī)器可直接執(zhí)行的語言是低級(jí)語言;必須經(jīng)過“翻譯”才能執(zhí)行的語言是高級(jí)語言。組合語言是低級(jí)語言;Basic、Pascal、Fortran、C、MathLab、C++、Java、C#等都是高級(jí)語言。低級(jí)語言由於面向機(jī)器,所以執(zhí)行效率很高;但可讀性差、編寫困難,不易維護(hù)。人與電腦的溝通機(jī)器語言:機(jī)器直接執(zhí)行組合語言:與機(jī)器碼對(duì)應(yīng)高級(jí)語言:通過“翻譯”010100101001001100110011010100101001001100110011MOVAX,A5hMOVBX,90hINT13h010100101001001100110011。。。for(i=1,i<20;i++){variable+=25;if(variable==100)break;}高級(jí)語言高級(jí)語言遮罩了機(jī)器的細(xì)節(jié),提高了語言的抽象層次,程式中可以採(cǎi)用具有一定涵義的數(shù)據(jù)命名和容易理解的執(zhí)行語句。這使得在書寫程式時(shí)可以聯(lián)繫到程式所描述的具體事物。高級(jí)語言的特徵:使用人比較容易理解的邏輯語言來記錄電腦運(yùn)算過程。高級(jí)語言的邏輯結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)、迴圈結(jié)構(gòu)等。高級(jí)語言與具體機(jī)器指令無關(guān)。高級(jí)語言需要通過編譯或解釋才能在電腦上運(yùn)行。面向過程與面向?qū)ο笞钤缑嫦蜻^程FORTRAN77:代碼結(jié)構(gòu)化程式ALGOL60,後發(fā)展成PASCAL:代碼50年代開始發(fā)展,直到80年代。80年代末C語言開始流行,一直到90年代。面向過程實(shí)際上就是面向結(jié)構(gòu)和函數(shù)的程式。軟體危機(jī)軟體危機(jī)最早在1968年的NATO會(huì)議提出,表現(xiàn)為:對(duì)軟體的需求遠(yuǎn)超出現(xiàn)有的生產(chǎn)能力;人們依賴於脆弱的軟體,目前的軟體不可靠、缺乏安全性、性能下降、出錯(cuò)、難以升級(jí),73%的軟體專案被延遲、超資、取消或失敗。為了從根本上解決軟體危機(jī)的危機(jī),人類提出了“軟體工程”的一些列方法,然而,眾多的軟體工程的方法並沒有徹底解決“軟體危機(jī)”的問題。軟體危機(jī)1986年,弗雷德裏克·布魯克斯提出一個(gè)著名悲觀論斷:“沒有一種單純的技術(shù)或管理上的進(jìn)步,能夠獨(dú)立地承諾在10年內(nèi)大幅度地提高軟體的生產(chǎn)率、可靠性和簡(jiǎn)潔性”。非常遺憾的是銀彈論斷迄今為止尚未打破!據(jù)美國(guó)國(guó)家標(biāo)準(zhǔn)和技術(shù)研究院的一份報(bào)告顯示,佔(zhàn)據(jù)世界軟體銷售額85%的是大型的專用軟體,而其開發(fā)的失敗率卻高達(dá)70%。針對(duì)日趨複雜的軟體需求的挑戰(zhàn),軟體業(yè)界在90年代發(fā)展出了面向?qū)ο螅∣bject-Oriented)的軟體開發(fā)模式,作為針對(duì)“軟體危機(jī)”的最佳對(duì)策。面向?qū)ο蟮乃枷胍话銓?duì)象:是現(xiàn)實(shí)世界中一個(gè)實(shí)際存在的事物??梢允褂行蔚模ū热缫惠v汽車),也可以是無形的(比如一項(xiàng)計(jì)畫)。是構(gòu)成世界的一個(gè)獨(dú)立單位,具有:靜態(tài)特徵:可以用某種數(shù)據(jù)來描述動(dòng)態(tài)特徵:對(duì)象所表現(xiàn)的行為或具有的功能軟體中的對(duì)象:對(duì)象應(yīng)可以用量化描述和處理;對(duì)象具有屬性和行為:屬性:描述對(duì)象的靜態(tài)特徵的資料項(xiàng)目;行為:表述對(duì)象的動(dòng)態(tài)特徵的操作序列。面向?qū)ο蟮乃枷朊嫦蜻^程好比是無人管理的閱覽室,只有書架和圖書,隨便看,隨便拿。面向?qū)ο蠛帽仁菆D書館,圖書被有效的管理(分類),借書憑證,到期歸還。屬性:各種類型的圖書、各個(gè)閱覽室行為:圖書進(jìn)貨,閱讀規(guī)則,借閱規(guī)則,殘破處理等。面向?qū)ο蟮乃枷搿?/p>
Class分類——人類通常的思維方法分類所依據(jù)的原則——抽象忽略事物的非本質(zhì)特徵,只注意那些與當(dāng)前目標(biāo)有關(guān)的本質(zhì)特徵,從而找出事物的共性,把具有共同性質(zhì)的事物劃分為一類,得出一個(gè)抽象的概念。例如,石頭、樹木、汽車、房屋等都是人們?cè)陂L(zhǎng)期的生產(chǎn)和生活實(shí)踐中抽象出的概念。面向?qū)ο蟮乃枷搿?/p>
Class面向?qū)ο蠓椒ㄖ械?類"具有相同屬性和服務(wù)的一組對(duì)象的集合為屬於該類的全部對(duì)象提供了抽象的描述,包括屬性和行為兩個(gè)主要部分。類與對(duì)象的關(guān)係:
猶如模具與鑄件之間的關(guān)係,一個(gè)屬於某類的對(duì)象稱為該類的一個(gè)實(shí)例。面向?qū)ο蟮乃枷搿庋b
Envelopment把對(duì)象的屬性和服務(wù)結(jié)合成一個(gè)獨(dú)立的系統(tǒng)單位。盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。對(duì)外形成一個(gè)邊界(或者說一道屏障),只保留有限的對(duì)外介面使之與外部發(fā)生聯(lián)繫。例如:圖書館的管理,由管理員驗(yàn)證你證件的有效性,查找你所需要的資料等。面向?qū)ο蟮乃枷搿^承
Inherit繼承對(duì)於軟體複用有著重要意義,是面向?qū)ο蠹夹g(shù)能夠提高軟體開發(fā)效率的重要原因之一。定義:特殊類的對(duì)象擁有其一般類的全部屬性與服務(wù),稱作特殊類對(duì)一般類的繼承。例如:將輪船作為一個(gè)一般類,客輪便是一個(gè)特殊類。面向?qū)ο蟮乃枷搿鄳B(tài)性
Polymorphism多態(tài)是指在一般類中定義的屬性或行為,被特殊類繼承之後,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。這使得同一個(gè)屬性或行為在一般類及其各個(gè)特殊類中具有不同的語義。例如:數(shù)的加法->實(shí)數(shù)的加法
->複數(shù)的加法軟體編寫的一些常見問題問題1:常量與變數(shù)的區(qū)別?常量:在程式運(yùn)行中其值不能被改變的量。變數(shù):在程式運(yùn)行中其值可以被改變的量。常量類型:整型常量、實(shí)型常量、字元常量、符號(hào)常量(宏定義)。#definePI3.1415926變數(shù):變數(shù)名,變數(shù)值。原則:先定義後使用。inta;a=10;
問題2:運(yùn)算符的來歷?在低級(jí)語言中只有操作指令(instruction)和運(yùn)算元(operand)instructionoperand1,operand2高級(jí)語言將能完成某項(xiàng)工作的一組有關(guān)指令用函數(shù)(function)來表示。如:intc;c=Add(inta,intb)表示a與b的和。進(jìn)一步抽象:inta,b,c;…c=a+b;同樣:c=Increase(inta);
c=a++;根據(jù)運(yùn)算符operator的運(yùn)算元的個(gè)數(shù)來確定運(yùn)算符的目數(shù):?jiǎn)文?、雙目、三目。
問題3:
C語言中有哪些運(yùn)算符?雙目運(yùn)算符:有兩個(gè)運(yùn)算元;單目運(yùn)算符:有一個(gè)運(yùn)算元;雙目運(yùn)算符:+(加),-(減),*(乘),/(除),%(取餘)
=
(賦值)+=、-=、/=、*=、|=、&=、^===(相等),!=(不相等),>(大於),<(小於),>=
(大於等於),<=(小於等於)。||(邏輯或),&&(邏輯與)
<<(左移),>>(右移),|(或),&(與),^(異或)
.(結(jié)構(gòu)成員)、->(指針型結(jié)構(gòu)成員),(逗號(hào)運(yùn)算)問題4:
C語言中有哪些運(yùn)算符?單目運(yùn)算符:++(遞增),--(遞減),-(負(fù))。?。ㄟ壿嫹牵(補(bǔ))&(取地址)、*(按指針取值)sizeof(取大小)、()(類型轉(zhuǎn)換)、[](數(shù)組下標(biāo))三目運(yùn)算符:
?:(條件運(yùn)算):c=(a>b)?a:b;等價(jià)於if(a>b)c=a;elsec=b;
問題5:
宏定義是什麼?1.定義一個(gè)常量#definePI3.1415926floatx,y;x=PI/2.0;y=3*PI;2.定義一個(gè)帶參數(shù)的運(yùn)算式#defineDISTANT(x,y)sqrt((x)*(x)+(y)*(y))floatx,y,d;d=DISTANT(x,y);3.字串可以這樣定義:
#definePRINT_MYNAME(myname) \ printf(“Mynameis=%s”,#myname);4.字串還能這樣:
#defineNEW_VARIABLE(newtype) \ var=Var_##newtype;問題6:
地址是什麼回事?指針又是怎麼?地址(address)是數(shù)據(jù)在內(nèi)存中存放的位置。按位元組編號(hào)。每個(gè)有效的變數(shù)都有有效的地址。在有效地址上存放的可能是別的地址的值。例如設(shè)a,b的地址分別是A,B,A=>&a,B=>&b;地址B存放了地址A的值&a=>A=>*B=>b;
因此a=>*(&a)=>*b;所以b是指向a的指針![注]=>為等價(jià)於(數(shù)值相同)的意思。
inta;int*b;a=10;b=&a;則*b的值是10!b是a的指針!問題7:雙指針是怎麼回事?指針與數(shù)組是什麼關(guān)係?請(qǐng)看下麵的例子:inta;int*b;int**c;a=10;b=&a;c=&b;c就是指針的指針,即雙指針。數(shù)組有靜態(tài)的(棧stack中申請(qǐng))和動(dòng)態(tài)的(堆heap中申請(qǐng))
charName[10];/*Name擁有10個(gè)位元組的空間*/char*Text;Text=malloc(10);/*Text也擁有10個(gè)位元組的空間*/
靜態(tài)空間是自動(dòng)釋放的,而動(dòng)態(tài)空間是需要調(diào)用Free來釋放的。二維數(shù)組就應(yīng)該用雙指針,如char**。問題8:如何理解函數(shù)的參數(shù)?函數(shù)有形參和實(shí)參。形參表示參數(shù)的形式,實(shí)參表示實(shí)際的參數(shù)傳遞。實(shí)參的數(shù)據(jù)類型要與形參保持一致。聲明:voidfunction(intvar1,intvar2);使用:intv1,v2;v1=10;v2=20;function(v1,v2);v1,v2通過函數(shù)入口將數(shù)值傳入function內(nèi)。如果function將var1和var2的值改變了,是否會(huì)影響function外部呢?
問題8:如何理解函數(shù)的參數(shù)?如果函數(shù)定義:voidfunction(intvar1,intvar2){var1=100;var2=200;}調(diào)用:intv1,v2;v1=10;v2=20;function(v1,v2);printf(“var1=%d,var2=%d”,v1,v2);結(jié)果是:var1=10,var2=20這稱為傳值調(diào)用。問題8:如何理解函數(shù)的參數(shù)?如果函數(shù)定義:voidfunction(intvar1,int*pvar2){var1=100;*pvar2=200;}調(diào)用:intv1,v2;v1=10;v2=20;function(v1,&v2);printf(“var1=%d,var2=%d”,v1,v2);結(jié)果是:var1=10,var2=200這稱為傳指針調(diào)用。本課考核方法平時(shí)成績(jī):20分上課和作業(yè)實(shí)驗(yàn)成績(jī):30分三次MFC編程練習(xí)期末考試:50分開卷考試,基本概念和編程能力C++語言概述C++是從C語言發(fā)展演變而來的,首先是一個(gè)更好的C。引入了類的機(jī)制,最初的C++被稱為“帶類的C”。1983年正式取名為C++。從1989年開始C++語言的標(biāo)準(zhǔn)化工作。於1994年制定了ANSIC++標(biāo)準(zhǔn)草案。於1998年11月被國(guó)際標(biāo)準(zhǔn)化組織(ISO)批準(zhǔn)為國(guó)際標(biāo)準(zhǔn),成為目前的C++。C++的特點(diǎn)全面相容C它保持了C的簡(jiǎn)潔、高效和接近組合語言等特點(diǎn)。對(duì)C的類型系統(tǒng)進(jìn)行了改革和擴(kuò)充。支持面向?qū)ο蟮姆椒–++支持面向過程的程式設(shè)計(jì),但不是一個(gè)純正的面向?qū)ο蟮恼Z言。C++程式實(shí)例—例2-1//2_1.cpp#include<iostream>usingnamespacestd;intmain(){
cout<<"Hello!\n";
cout<<"Welcometoc++!\n";}運(yùn)行結(jié)果:Hello!Welcometoc++!數(shù)據(jù)類型
——常量與變數(shù)#include<iostream>usingnamespacestd;#definePI3.14159intmain(){
const
intPRICE=30;
intnum,total;
floatv,r,h;num=10;total=num*PRICE;
cout<<total<<endl;r=2.5;h=3.2;v=PI*r*r*h;
cout<<v<<endl;}變數(shù)常量常量先聲明,後使用數(shù)據(jù)類型—整型數(shù)據(jù)及取值範(fàn)圍類型 說明符 位數(shù) 數(shù)值範(fàn)圍
布爾 boolfalse,true位元組 char 8-128~127短整數(shù) short 16 -32768~32767 -215~(215-1) 長(zhǎng)整數(shù) long 32 -231~(231-1)無符號(hào)
byte 8 0~256 unsignedshort 16 0~65535(216-1)
unsigned[int] 32 0~(232-1)
unsignedlong 32 0~(232-1) 數(shù)據(jù)類型—int類型int類型與操作系統(tǒng)有關(guān)。Windows3.0內(nèi)核,為16位Win32內(nèi)核,為32位未來64系統(tǒng)中(Vista),將為64位int有關(guān)的數(shù)據(jù)類型intunsignedint數(shù)據(jù)類型—浮點(diǎn)數(shù)據(jù)及取值範(fàn)圍
float 32位
#defineFLT_MAX3.402823466e+38F/*maxvalue*/=3.402823466×1038F表示單精確度浮點(diǎn)數(shù):保證小數(shù)點(diǎn)後7位精度
double 64位#defineDBL_MAX1.7976931348623158e+308=
1.7976931348623158×10308雙精度數(shù):保證小數(shù)點(diǎn)後15位精度數(shù)據(jù)類型的轉(zhuǎn)換整數(shù)間轉(zhuǎn)換bytea=100;unsignedlongb=(unsignedlong)a;//強(qiáng)制類型轉(zhuǎn)換bytec=(byte)b;//需要注意精度損失的問題浮點(diǎn)數(shù)與整數(shù)轉(zhuǎn)換floata=3.1415926f;intb=(int)a;//b=3如何實(shí)現(xiàn)四捨五入?
intb=(int)(a+0.5f);變數(shù)的存儲(chǔ)類型auto屬於一時(shí)性存儲(chǔ),其存儲(chǔ)空間可以被若干變數(shù)多次覆蓋使用。register存放在通用寄存器中。extern在所有函數(shù)和程式段中都可引用。static在內(nèi)存中是以固定地址存放的,在整個(gè)程式運(yùn)行期間都有效。關(guān)係運(yùn)算與關(guān)係運(yùn)算式關(guān)係運(yùn)算是比較簡(jiǎn)單的一種邏輯運(yùn)算,優(yōu)先次序?yàn)椋?/p>
<<=>>===!=
優(yōu)先順序相同(高)優(yōu)先順序相同(低)關(guān)係運(yùn)算式是一種最簡(jiǎn)單的邏輯運(yùn)算式其結(jié)果類型為bool,值只能為true
或false。例如:a>b,c<=a+b,x+y==3邏輯運(yùn)算與邏輯運(yùn)算式邏輯運(yùn)算符
!(非)&&(與)||(或)
優(yōu)先次序:高→低邏輯運(yùn)算式
例如:(a>b)&&(x>y)
其結(jié)果類型為bool,值只能為true
或false條件運(yùn)算符與條件運(yùn)算式一般形式運(yùn)算式1
?運(yùn)算式2:
運(yùn)算式3運(yùn)算式1必須是bool類型執(zhí)行順序先求解運(yùn)算式1,若運(yùn)算式1的值為true,則求解運(yùn)算式2,運(yùn)算式2的值為最終結(jié)果若運(yùn)算式1的值為false,則求解運(yùn)算式3,運(yùn)算式3的值為最終結(jié)果例:x=(a>b)?a:b;sizeof運(yùn)算符語法形式
sizeof(類型名)
或sizeof(運(yùn)算式)結(jié)果值:
“類型名”所指定的類型或“運(yùn)算式”的結(jié)果類型所占的位元組數(shù)。例:sizeof(short)sizeof(x)位運(yùn)算——按位與(&)AND運(yùn)算規(guī)則將兩個(gè)運(yùn)算量的每一個(gè)位進(jìn)行邏輯與操作舉例:計(jì)算3&53:000000115:(&)000001013&5:00000001用途:將某一位置0,其他位不變。例如:
將char型變數(shù)a的最低位置0:
a=a&0376;取指定位。
例如:有charc;inta;
取出a的低位元組,置於c中:c=a&0377;
位運(yùn)算——按位或(|)OR運(yùn)算規(guī)則將兩個(gè)運(yùn)算量的每一個(gè)位進(jìn)行邏輯或操作舉例:計(jì)算3|53:000000115:(|)000001013|5:00000111用途:將某些位置1,其他位不變。
例如:將int
型變數(shù)a
的低位元組置
1
:
a=a|0xff;位運(yùn)算——按位異或(^)XOR運(yùn)算規(guī)則兩個(gè)運(yùn)算元進(jìn)行異或:
若對(duì)應(yīng)位相同,則結(jié)果該位為0,
若對(duì)應(yīng)位不同,則結(jié)果該位為1,舉例:計(jì)算071^052071: 00111001052:(^)00101010071^052: 00010011位運(yùn)算——按位異或(^)
XOR用途:使特定位翻轉(zhuǎn)(與0異或保持原值,與1異或取反)例如:要使01111010
低四位翻轉(zhuǎn):
01111010(^) 00001111 01110101
位運(yùn)算——取反(~)
NOT單目運(yùn)算符,對(duì)一個(gè)二進(jìn)位數(shù)按位取反。例:025:0000000000010101~025:1111111111101010位運(yùn)算——移位SHIFT左移運(yùn)算(<<)左移後,低位補(bǔ)0,高位捨棄。例:83<<3
0x53<<3
01010011<<310011000
0x98
152右移運(yùn)算(>>)右移後,低位捨棄,高位補(bǔ)0或補(bǔ)“符號(hào)位”例:152>>4
0x98>>4
10011000>>4
00001001
9高位捨棄低位捨棄低位補(bǔ)0高位補(bǔ)0運(yùn)算符分類算術(shù)運(yùn)算符加(+)、減(-)、乘(*)、除(/)、求餘(或稱模運(yùn)算,%)、自增(++)、自減(--)共七種。關(guān)係運(yùn)算符大於(>)、小於(<)、等於(==)、大於等於(>=)、小於等於(<=)和不等於(!=)六種。邏輯運(yùn)算符與(&&)、或(||)、非(!)三種。位操作運(yùn)算符位與(&)、位或(|)、位非(~)、位異或(^)、左移(<<)、右移(>>)六種。賦值運(yùn)算符賦值(=)、複合算術(shù)賦值(+=,-=,*=,/=,%=)和複合位運(yùn)算賦值(&=,|=,^=,>>=,<<=)三類共十一種。條件運(yùn)算符用於條件求值(?:)。逗號(hào)運(yùn)算符用於把若干運(yùn)算式組合成一個(gè)運(yùn)算式(,)。指針運(yùn)算符用於取內(nèi)容(*)和取地址(&)二種運(yùn)算。求位元組數(shù)運(yùn)算符用於計(jì)算數(shù)據(jù)類型所占的位元組數(shù)(sizeof)。特殊運(yùn)算符有括弧(),下標(biāo)[],成員(->,.)等幾種。運(yùn)算符優(yōu)先順序括弧++,--,sizeof*,/,%+,-==,!=位運(yùn)算&&||?:賦值運(yùn)算=逗號(hào)運(yùn)算,思考:intx=1,y=0;boolz=!x&&x+y&&++y;高低boolz=(!x)&&(x+y)&&(++y);
(!1)&&(1+0)&&(1)
0#include<iostream>usingnamespacestd;intmain(){ intyear;
boolIsLeapYear;
cout
<<
"Entertheyear:";
cin
>>
year; IsLeapYear=((
year%4==0&&
year%100!=0)||(year%400==0));
if(IsLeapYear)
cout
<<
year
<<
"isaleapyear“
<<
endl;
else
cout
<<
year
<<
"isnotaleapyear“
<<
endl;}例2-2:輸入一個(gè)年份,判斷是否閏年運(yùn)行結(jié)果:Entertheyear:20002000isaleapyear#include<iostream>using
namespacestd;intmain(){ intday;
cin>>day;
switch(day)
{
case0:
cout<<"Sunday"<<endl;
break;
case1:
cout<<"Monday"<<endl;
break;
case2:
cout<<"Tuesday"<<endl;
break;
case3:cout<<"Wednesday"<<endl;
break;
case4:
cout<<"Thursday"<<endl;
break;
case5:
cout<<"Friday"<<endl;
break;
case6:
cout<<"Saturday"<<endl;
break;
default:
cout<<"DayoutofrangeSunday..Saturday"<<endl;
break; }}例2-4:輸入一個(gè)0~6的整數(shù),轉(zhuǎn)換成星期運(yùn)行結(jié)果:2Tuesday例2-7:用do-while語句編程程式1:#include<iostream>usingnamespacestd;intmain(){inti,sum(0);
cin>>i;
while(i<=10){sum+=i;i++;}
cout<<"sum="<<sum<<endl;}程式2:#include<iostream>usingnamespacestd;intmain(){inti,sum(0);
cin>>i;
do{sum+=i;i++;}while(i<=10);
cout<<"sum="<<sum<<endl;}break和continue語句break語句使程式從循環(huán)體和switch語句內(nèi)跳出,繼續(xù)執(zhí)行邏輯上的下一條語句。不宜用在別處。continue
語句結(jié)束本次迴圈,接著判斷是否執(zhí)行下一次迴圈。運(yùn)算符分類算術(shù)運(yùn)算符加(+)、減(-)、乘(*)、除(/)、求餘(或稱模運(yùn)算,%)、自增(++)、自減(--)共七種。關(guān)係運(yùn)算符大於(>)、小於(<)、等於(==)、大於等於(>=)、小於等於(<=)和不等於(!=)六種。邏輯運(yùn)算符與(&&)、或(||)、非(!)三種。位操作運(yùn)算符位與(&)、位或(|)、位非(~)、位異或(^)、左移(<<)、右移(>>)六種。賦值運(yùn)算符賦值(=)、複合算術(shù)賦值(+=,-=,*=,/=,%=)和複合位運(yùn)算賦值(&=,|=,^=,>>=,<<=)三類共十一種。條件運(yùn)算符用於條件求值(?:)。逗號(hào)運(yùn)算符用於把若干運(yùn)算式組合成一個(gè)運(yùn)算式(,)。指針運(yùn)算符用於取內(nèi)容(*)和取地址(&)二種運(yùn)算。求位元組數(shù)運(yùn)算符用於計(jì)算數(shù)據(jù)類型所占的位元組數(shù)(sizeof)。特殊運(yùn)算符有括弧(),下標(biāo)[],成員(->,.)等幾種。運(yùn)算符優(yōu)先順序括弧++,--,sizeof*,/,%+,-==,!=位運(yùn)算&&||?:賦值運(yùn)算=逗號(hào)運(yùn)算,思考:intx=1,y=0;boolz=!x&&x+y&&++y;Z=?高低z
(!x)&&(x+y)&&(++y)
0&&(1+0)&&(1)
0#include<iostream>using
namespacestd;intmain(){ intyear;
boolIsLeapYear;
cout
<<
"Entertheyear:";
cin
>>
year; IsLeapYear=((
year%4==0&&
year%100!=0)||(year%400==0));
if(IsLeapYear)
cout
<<
year
<<
"isaleapyear“
<<
endl;
else
cout
<<
year
<<
"isnotaleapyear“
<<
endl;}例2-2:輸入一個(gè)年份,判斷是否閏年運(yùn)行結(jié)果:Entertheyear:20002000isaleapyear#include<iostream>using
namespacestd;intmain(){ intday;
cin>>day;
switch(day)
{
case0:
cout<<"Sunday"<<endl;
break;
case1:
cout<<"Monday"<<endl;
break;
case2:
cout<<"Tuesday"<<endl;
break;
case3:cout<<"Wednesday"<<endl;
break;
case4:
cout<<"Thursday"<<endl;
break;
case5:
cout<<"Friday"<<endl;
break;
case6:
cout<<"Saturday"<<endl;
break;
default:
cout<<"DayoutofrangeSunday..Saturday"<<endl;
break; }}例2-4:輸入一個(gè)0~6的整數(shù),轉(zhuǎn)換成星期運(yùn)行結(jié)果:2Tuesday例2-7:用do-while語句編程程式1:#include<iostream>using
namespacestd;intmain(){inti,sum(0);
cin>>i;
while(i<=10){sum+=i;i++;}
cout<<"sum="<<sum<<endl;}程式2:#include<iostream>using
namespacestd;intmain(){inti,sum(0);
cin>>i;
do{sum+=i;i++;}while(i<=10);
cout<<"sum="<<sum<<endl;}例2-8:用for語句編程#include<iostream>using
namespacestd;intmain(){intn,k;
cout<<"Enterapositiveinteger:";
cin>>n;
cout<<"Number"<<n<<"Factors
";
for(
k=1;k<=n;k++
)
if(
n%k==0
)
cout<<k<<"";
cout<<endl;}運(yùn)行結(jié)果1:Enterapositiveinteger:7Number7Factors17運(yùn)行結(jié)果2:Enterapositiveinteger:36Number36Factors123469121836關(guān)於宏定義1.定義一個(gè)常量#definePI3.1415926floatx,y;x=PI/2.0;y=3*PI;2.定義一個(gè)帶參數(shù)的運(yùn)算式#defineDISTANT(x,y)sqrt((x)*(x)+(y)*(y))
floatx,y,d;d=DISTANT(x,y);3.字串可以這樣定義:
#definePRINT_MYNAME(myname) \ printf(“Mynameis=%s”,#myname);4.字串還能這樣:
#defineNEW_VARIABLE(newtype) \ var=Var_##newtype;關(guān)於地址和指針地址(address)是數(shù)據(jù)在內(nèi)存中存放的位置。按位元組編號(hào)。每個(gè)有效的變數(shù)都有有效的地址。在有效地址上存放的可能是別的地址的值。設(shè)
為等價(jià)於(數(shù)值相同)的意思。例如設(shè)a的地址是A,A=&a;則a
*A;另有變數(shù)b的地址B(b*B)存放了地址A的值
*B=A;則*B&a
即b&a或*ba
因此a
*(&a)
*A*(*B)*b
所以b是指向a的指針!例:inta;int*b;b=&a;a=10;
這時(shí),*b10
指針是記錄別的變數(shù)的地址的變數(shù)。aAb=AB更好的C1.C++的單行注釋
C代碼中只能是:/*Thisisamulti-linecomment.*/C++代碼增加:
//Thisisasingle-linecomment.2.C++的輸入/輸出流C代碼:
printf(“Enternewtag:”);//列印輸出
scanf(“%d”,&tag);//等待輸入
printf(“Tagis:%d\n”,tag);//列印輸出C++代碼:
cout
<<“Enternewtag:”;//輸出流
cin
>>tag;//輸入流
cout
<<“Tagis:”<<tag<<‘\n’;//輸出流更好的C3.C++中的聲明 (變數(shù))C代碼:函數(shù)體的執(zhí)行語句之前(頭部):
inti;
for(i=0;i<=5;i++) printf(“%d\n”,i);C++代碼:函數(shù)體的任何地方,如
for(int
i=0;i<=5;i++)
cout<<i<<‘\n’;4.在C++中建立新的數(shù)據(jù)類型 C代碼:
enum、struct、union不是新的數(shù)據(jù)類型。C++代碼:enum、struct、union、class是新的數(shù)據(jù)類型。//datatypedeclareenumBoolean{FALSE,TRUE};structName{
charfirst[10];
charlast[10];};unionNumber{
inti;
floatf;};enum、struct、union作為數(shù)據(jù)類型//在C中的用法:enumBooleandone;structNamestudent;unionNumberx;//在C++中的用法:Booleandone=FALSE;Namestudent={“zhang”,”wang”};Numberx={21,39.3};5.函數(shù)原型和類型檢查C代碼:函數(shù)原型不是必須的;C++代碼:函數(shù)原型必須有,如 intaquare(int);C代碼:
intprint(void);
//void必須寫C++代碼:
intprint();
//void可省略6.內(nèi)聯(lián)函數(shù)C代碼: 沒有。C++代碼:
inline
intFunction();內(nèi)聯(lián)函數(shù)與宏定義比較相同的地方:編譯時(shí)嵌入程式中。不同的地方:內(nèi)聯(lián)函數(shù)的編寫與普通函數(shù)一樣,也可以跟蹤;但宏定義只是作替換,與函數(shù)不同,並不能跟蹤。7.引用ReferenceC語言中不存在,C++新加的概念。
inta=10;
int*pa=&a;
int&ra=a;//thereferenceof‘a(chǎn)’ra和a共用一個(gè)地址。
pa是指向a的指針;ra是a的一個(gè)別名。如果a=20則*pa與ra都為20。apa=&a12…&a…&pa…Addr:Value:pa&a
pa
&raa*para&ra7.引用Reference函數(shù)的調(diào)用方式:傳值調(diào)用:
voidFunction(inta){a=10;}傳指針調(diào)用:
voidFunction(int*pa){*pa=10;}傳地址調(diào)用:
voidFunction(int&ra){ra=10;}//傳值調(diào)用intsquareByValue(inta){
returna*=a;//不修改調(diào)用者的參數(shù)}//指針調(diào)用voidsquareByPointer(int*bPtr){ *bPtr*=*bPtr;//修改調(diào)用者的參數(shù)}//引用調(diào)用voidsquareByReference(int&cRef){ cRef*=cRef;//修改調(diào)用者的參數(shù)}引用的特點(diǎn)1)引用變數(shù)是被引用變數(shù)的“別名”。即共用一個(gè)地址。2)以引用作形參的函數(shù)的調(diào)用方式與傳值調(diào)用寫法相同,但傳值不會(huì)影響到外部,而引用則會(huì)影響參數(shù)在外部的值。3)在函數(shù)中,傳值調(diào)用傳的是參數(shù)的值;而用引用調(diào)用傳的是參數(shù)的地址。4)引用可以用指針代替,但指針不能完全被指針代替。比如鏈表、直接記憶體尋址、修改地址等。但指針不安全,而引用比較安全。JAVA和C#為保證安全性都禁止使用指針,只能用“引用”。8.const限定符C代碼: 沒有。C++代碼:const
floatPI=3.14159const
int*iPtr=&integer;1)常量必須初始化;(聲明時(shí)賦值)2)常量不能修改。與宏定義不同,const修飾的是變數(shù);而宏僅僅作替代而已。9.動(dòng)態(tài)分配記憶體C代碼: typeName*ptr;intnum=10;ptr=malloc(sizeof(typeName)*num);//申請(qǐng)free(ptr);//釋放C++代碼:ptr=
new
typeName[num];//申請(qǐng)delete
ptr;//釋放C語言中是調(diào)用函數(shù),C++中是運(yùn)算符。初始化新分配的記憶體float*tingPtr=new
float(3.14159);deletetingPtr;動(dòng)態(tài)建立數(shù)組int*arrayPtr=new
int[100];delete[]arrayPtr;10.默認(rèn)參數(shù)inlineintboxVolume(intlength=3,intwidth=2,intheight=1){returnlength*width*height;}調(diào)用該函數(shù)時(shí),可以有以下幾種方法:1) boxVolume();
//length=3,width=2,height=12) boxVolume(10);
//length=10,width=2,height=13) boxVolume(10,5);
//length=10,width=5,height=14)boxVolume(10,5,2);
//length=10,width=5,height=211.單目作用域運(yùn)算符
floatvalue=1.2345;intFunction(){intvalue=7;
floatf=::value;//取外部的值
intv=value;//取內(nèi)部的值}則f=1.2345v=7;對(duì)象的概念對(duì)象是現(xiàn)實(shí)世界的實(shí)體,是由一組狀態(tài)和行為組成的集合。面向?qū)ο蟮姆椒ǎ喊褑栴}看作成由許多彼此互相聯(lián)繫的對(duì)象組成。面向?qū)ο蟮某淌皆O(shè)計(jì)OOP:ObjectOrientedProgramming;把數(shù)據(jù)和函數(shù)封裝在稱為對(duì)象的包中,公佈對(duì)象的介面,而將實(shí)現(xiàn)的細(xì)節(jié)隱蔽起來。
對(duì)象是現(xiàn)實(shí)世界的實(shí)體,是由一組狀態(tài)和行為組成的集合。例1:圖書館狀態(tài):共有多少類圖書;每類圖書有多少冊(cè);讀者人數(shù);館內(nèi)庫(kù)存有多少本;正在閱讀的有多少本;外借多少本;……行為:辦圖書證;圖書檢索;閱覽室閱讀;外借閱讀;……例2:學(xué)校狀態(tài):總?cè)藬?shù);教師人數(shù);本科生人數(shù);研究生人數(shù);科研成果;……行為:招生;畢業(yè);授課;實(shí)驗(yàn);考試;科研;……面向?qū)ο蟮姆椒ǎ喊褑栴}看作成由許多彼此互相聯(lián)繫的對(duì)象組成。例:學(xué)校管理學(xué)校管理工作:學(xué)籍管理、教務(wù)管理、教師管理、住宿管理、伙食管理、科研管理、……學(xué)籍管理:入學(xué)、成績(jī)、獎(jiǎng)懲、畢業(yè)……教務(wù)管理:課程設(shè)置、排課、品質(zhì)監(jiān)督……住宿管理:宿舍安排、打掃衛(wèi)生、安全保衛(wèi)……伙食管理:飯卡管理、承包管理、衛(wèi)生監(jiān)督……科研管理:專案申請(qǐng)、設(shè)備採(cǎi)購(gòu)、專案鑒定……作為校長(zhǎng)不必每件事都去具體管理,他只要設(shè)置一個(gè)部門去管理就行了。這些部門就是對(duì)象!?。?/p>
大的單位的管理必須劃分不同的職能部門(Object)。結(jié)構(gòu)的定義
structTime{inthour;intminute;intsecond;};Time就是一個(gè)數(shù)據(jù)類型
TimetimeObject,timeArray[10],*timePtr;訪問結(jié)構(gòu)的成員cout<<timeObject.hour;cout<<timePtr->hour;用結(jié)構(gòu)實(shí)現(xiàn)用戶定義的類型Time結(jié)構(gòu)建立數(shù)據(jù)類型的缺陷:無初始化,可讀性差,可維護(hù)性差。voidShowTime(inthr,intmin,intsec);main(){ ShowTime(9,30,0);return0;}voidShowTime(inthr,intmin,intsec){cout<<(hr<10?“0”:“”)<<hr<<“:”<<(min<10?“0”:“”)<<min<<“:”<<(sec<10?“0”:“”)<<sec;}09:30:00structClock{inthour;intminute;intsecond;};voidShowTime(constClock&);main(){ClockmyClock={9,30,0};ShowTime(myClock);return0;}voidShowTime(constClock&c){cout<<(c.hour<10?“0”:“”)<<c.hour<<“:”<<(c.minute<10?“0”:“”)<<c.minute<<“:”<<(c.second<10?“0”:“”)<<c.second<<endl;}09:30:00classClock{public:Clock();
voidSetTime(int,int,int);
voidShowTime();private:
inthour;intminute;intsecond;};1)以關(guān)鍵字:class開始;2)構(gòu)造函數(shù):constructor//自動(dòng)執(zhí)行初始化3)公有函數(shù):public //供外部調(diào)用4)私有函數(shù):private //外部不能訪問(有一個(gè)例外,以後再介紹)構(gòu)造函數(shù)行為:公有函數(shù)狀態(tài):私有函數(shù)類和對(duì)象Clock::Clock()//constructor{hour=0;minute=0;second=0;}voidClock::SetTime(inthr,intmin,intsec){hour=(hr>=0&&hr<24)?hr:0; minute=(min>=0&&min<60)?min:0; second=(sec>=0&&sec<60)?sec:0;}voidClock::ShowTime(){cout<<(hour<10?“0”:“”)<<hour<<“:”<<(minute<10?“0”:“”)<<minute<<“:”<<(second<10?“0”:“”)<<second<<endl;}voidmain(){Clockc;c.SetTime(8,30,30);c.ShowTime();c.hour=9;}
結(jié)構(gòu)與類的比較結(jié)構(gòu)好比是一個(gè)無人管理的開放的閱覽室,所有的報(bào)刊雜誌都放在那裏,讀者可自主挑選。類則好比是有管理員的圖書館,看書借書必須通過管理員許可。C語言只能建一個(gè)閱覽室,C++可以建一個(gè)圖書館。類的作用域和訪問類的成員
關(guān)於作用域檔作用域:在本工程(project)的所有檔範(fàn)圍內(nèi)。類的作用域:在類的定義範(fàn)圍內(nèi),即所有數(shù)據(jù)成員和成員函數(shù)內(nèi)。在檔作用域內(nèi)定義變數(shù)或函數(shù),即全局變數(shù)或函數(shù)。在類的作用域內(nèi)定義變數(shù)或函數(shù),即數(shù)據(jù)成員和成員函數(shù)。
構(gòu)造函數(shù)classClock{public:Clock();Clock(intNewH,intNewM,intNewS);
voidSetTime(int,int,int);
voidShowTime();private:
inthour;intminute;intsecond;};Clock::Clock(){hour=minute=second=0;}Clock::Clock(intNewH,intNewM,intNewS){hour=NewH;minute=NewM;second=NewS;}classPoint{public:Point(intxx=0,intyy=0){X=xx;Y=yy;}Point(Point&p);//拷貝構(gòu)造函數(shù)
intGetX(){returnX;}
intGetY(){returnY;}
private:
intX,Y;};Point::Point(Point&p){X=p.X;Y=p.Y;
cout<<“拷貝構(gòu)造函數(shù)被調(diào)用”<<endl;}intmain(){PointA(1,2);PointB(A);//用對(duì)象A初試化對(duì)象B,拷貝構(gòu)造函數(shù)被調(diào)用
cout<<B.GetX()<<endl;
return0;}當(dāng)用類的一個(gè)對(duì)象去初始化該類的另一個(gè)對(duì)象時(shí)系統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù)實(shí)現(xiàn)拷貝賦值。拷貝構(gòu)造函數(shù)voidf(Pointp){cout<<p.GetX()<<endl;}intmain(){PointA(1,2);f(A);//調(diào)用拷貝構(gòu)造函數(shù)
return0;}Pointg(){PointA(1,2);
returnA;//調(diào)用拷貝構(gòu)造函數(shù)}intmain(){PointB;B=g();
return0;}若函數(shù)的形參為類對(duì)象,調(diào)用函數(shù)時(shí),實(shí)參賦值給形參,系統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù)。當(dāng)函數(shù)的返回值是類對(duì)象時(shí),系統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù)。訪問函數(shù)和工具函數(shù)將類的函數(shù)分為兩大類,訪問函數(shù)和工具函數(shù)。訪問函數(shù)是供客戶調(diào)用的,一般為public。工具函數(shù)是為實(shí)現(xiàn)訪問函數(shù)的某些功能而需要的函數(shù),一般為private。初始化類的對(duì)象:構(gòu)造函數(shù)構(gòu)造函數(shù)可使每個(gè)對(duì)象都有正確的初始值。在構(gòu)造函數(shù)中使用默認(rèn)參數(shù)classTime{public:Time(int=0,int=0,int=0);……析構(gòu)函數(shù)classClock{public:Clock();voidSetTime(int,int,int);
voidShowTime();
~Clock();//析構(gòu)函數(shù)private:
inthour;intminute;intsecond;
char*pbuf;};Clock::Clock(){pbuf=newchar[128];}Clock::~Clock(){delete[]pbuf;}對(duì)象被刪除的時(shí)刻自動(dòng)調(diào)用main(){Clockc;//構(gòu)造
c.SetTime(9,30,30);}//析構(gòu)析構(gòu)函數(shù)的使用一個(gè)類只能有一個(gè)析構(gòu)函數(shù),不允許重載!調(diào)用析構(gòu)函數(shù)和構(gòu)造函數(shù)的時(shí)機(jī)結(jié)論:最先析構(gòu)的是自動(dòng)變數(shù);靜態(tài)對(duì)象的生命期一直到程式結(jié)束;(static)全局對(duì)象是最後被析構(gòu)的。數(shù)據(jù)成員和成員函數(shù)的使用數(shù)據(jù)一般設(shè)為私有成員,便於保護(hù);需要用戶設(shè)置的私有數(shù)據(jù)成員用get和set提供給用戶;要保證私有數(shù)據(jù)成員在任何時(shí)候都是有效的。介面與實(shí)現(xiàn)的分離
軟體工程的一個(gè)最基本的原則:介面與實(shí)現(xiàn)分離.h檔與.cpp檔分離類的定義與類的實(shí)現(xiàn)分離但是Java中類的定義與實(shí)現(xiàn)是在一起的,Why?因?yàn)镴ava中有一個(gè)專門管介面的類叫Interface。這個(gè)類是公開的,而其他類則被遮罩起來。這種方式稱為對(duì)象的“包裝”或稱“封裝”。public:,private:(protected:)都是用來控制成員函數(shù)的作用。類的客戶可通過公有成員(public)知道類提供什麼樣的服務(wù)。類的客戶不能直接訪問類的私有成員(private),它們只能通過成員函數(shù)(或友元)來訪問。C++提倡編寫與實(shí)現(xiàn)無關(guān)的程式。在類定義中儘量避免寫函數(shù)實(shí)現(xiàn)的代碼。(也不是絕對(duì)的,只要覺得可以公開,並以後不會(huì)改動(dòng),則可以將實(shí)現(xiàn)寫到類的定義中)[注意]在理論上public:,private:
protected:
只使用一次。但現(xiàn)在C++編譯器(如VC++)可支持多次。而在Java中每一個(gè)函數(shù)前面都要求加上這個(gè)說明符。
§控制對(duì)成員的訪問構(gòu)造函數(shù)classClock{public:Clock():hour(0),minute(0),second(0){}Clock(intNewH,intNewM=0,intNewS=0);Clock(Clock&c);private:
inthour;intminute;intsecond;};Clock::Clock(intNewH,intNewM,intNewS){hour=NewH;minute=NewM;second=NewS;}Clock::Clock(Clock&c){hour=c.hour;minute=c.minute;second=c.second;}相當(dāng)於:Clock::Clock(){hour=minute=second=0;}拷貝構(gòu)造函數(shù)默認(rèn)參數(shù)構(gòu)造函數(shù)析構(gòu)函數(shù)classClock{public:Clock();voidSetTime(int,int,int);
voidShowTime();
~Clock();//析構(gòu)函數(shù)private:
inthour;intminute;intsecond;
char*pbuf;};Clock::Clock(){pbuf=newchar[128];}Clock::~Clock(){delete[]pbuf;}對(duì)象被刪除的時(shí)刻自動(dòng)調(diào)用main(){Clockc;//構(gòu)造
c.SetTime(9,30,30);}//析構(gòu)構(gòu)造函數(shù)可使每個(gè)對(duì)象都有正確的初始值析構(gòu)函數(shù)可使每個(gè)對(duì)象在結(jié)束時(shí)自動(dòng)進(jìn)行清理工作析構(gòu)函數(shù)的使用一個(gè)類只能有一個(gè)析構(gòu)函數(shù),不允許重載!最先析構(gòu)的是自動(dòng)變數(shù);靜態(tài)對(duì)象的生命期一直到程式結(jié)束;(static)全局對(duì)象是最後被析構(gòu)的。訪問函數(shù)和工具函數(shù)將類的函數(shù)分為兩大類,訪問函數(shù)和工具函數(shù)。訪問函數(shù)是供客戶調(diào)用的,一般為public。工具函數(shù)是為實(shí)現(xiàn)訪問函數(shù)的某些功能而需要的函數(shù),一般為private。數(shù)據(jù)成員和成員函數(shù)的使用數(shù)據(jù)一般設(shè)為私有成員,便於保護(hù);需要用戶設(shè)置的私有數(shù)據(jù)成員用get和set提供給用戶;要保證私有數(shù)據(jù)成員在任何時(shí)候都是有效的。介面與實(shí)現(xiàn)的分離
軟體工程的一個(gè)最基本的原則:介面與實(shí)現(xiàn)分離.h檔與.cpp檔分離類的定義與類的實(shí)現(xiàn)分離但是Java中類的定義與實(shí)現(xiàn)是在一起的,Why?因?yàn)镴ava中有一個(gè)專門管介面的類叫Interface。這個(gè)類是公開的,而其他類則被遮罩起來。這種方式稱為對(duì)象的“包裝”或稱“封裝”。public:,private:(protected:)都是用來控制成員函數(shù)的作用。類的客戶可通過公有成員(public)知道類提供什麼樣的服務(wù)。類的客戶不能直接訪問類的私有成員(private),它們只能通過成員函數(shù)(或友元)來訪問。C++提倡編寫與實(shí)現(xiàn)無關(guān)的程式。在類定義中儘量避免寫函數(shù)實(shí)現(xiàn)的代碼。(也不是絕對(duì)的,只要覺得可以公開,並以後不會(huì)改動(dòng),則可以將實(shí)現(xiàn)寫到類的定義中)[注意]在理論上public:,private:
protected:
只使用一次。但現(xiàn)在C++編譯器(如VC++)可支持多次。而在Java中每一個(gè)函數(shù)前面都要求加上這個(gè)說明符。
§控制對(duì)成員的訪問§
軟體的可重用性面向?qū)ο蟮某淌皆O(shè)計(jì)的一個(gè)重要目標(biāo)就是軟體的可重用性??芍赜眯砸馕吨郧暗拇a可以部分加以利用,並對(duì)其餘部分改寫,以免整個(gè)程式重新編寫。要實(shí)現(xiàn)可重用性,程式必須設(shè)計(jì)良好、具有較好的可讀性,並預(yù)先把需要擴(kuò)展部分考慮好。函數(shù)原型(prototype)的作用域函數(shù)原型中的參數(shù),其作用域僅限於聲明中。例如,設(shè)有下列原型聲明:doubleArea(doubleradius);radius的作用域僅在於此,不能用於程式正文其他地方,因而可有可無??梢詫懗桑?/p>
doubleArea(double);doubleArea(doubleradius=5);可簡(jiǎn)化成doubleArea(double=5);塊作用域在塊中聲明的識(shí)別字,其作用域自聲明處起,限於塊中,例如:voidfun(inta){intb(a);
cin
>>
b;
if(b>0){
intc;......}}a
的作用域b
的作用域c
的作用域類作用域類X的成員M具有類作用域,對(duì)M的訪問方式如下:如果在X的成員函數(shù)中沒有聲明同名的局部作用域識(shí)別字,那麼在該函數(shù)內(nèi)可以訪問成員M。classX{intM;
public:voidfun();}voidX::fun(){M=10;{intM=20;……}
cout<<M;}局部自動(dòng)變數(shù)類的成員變數(shù)?檔作用域不在前述各個(gè)作用域中出現(xiàn)的聲明,具有檔作用域,這樣聲明的識(shí)別字的作用域開始於聲明點(diǎn),結(jié)束於檔尾。全局變數(shù)!inti;
//全局變數(shù),檔作用域voidmain(){i=5;{inti;
//局部變數(shù),塊作用域
i=7;
cout<<“i=“<<i<<endl;
//輸出7
}
cout<<“i=“<<i<<endl;
//輸出5}例5-2:變數(shù)的生存期與可見性#include<iostream.h>voidother();int
i=1;//i為全局變數(shù),具有靜態(tài)生存期。intmain(){staticint
a;//靜態(tài)局部變數(shù),有全局壽命,局部可見。
int
b
=-10;//b,c為局部變數(shù),具有動(dòng)態(tài)生存期。
int
c
=0;
cout<<"---MAIN---\n";
cout<<"i:"<<i
<<"a:"<<a
<<"b:"<<b
<<"c:"
<<
c
<<
endl;
c=c+8;other();
cout<<"---MAIN---\n";
cout<<"i:"<<i<<"a:"<<a
<<"b:"<<b
<<"c:" <<c
<<endl;
i=i+10;other();}voidother(){
static
int
a=2;
static
int
b=0;
//a,b為靜態(tài)局部變數(shù),具有全局壽命,局部可見。
//只第一次進(jìn)入函數(shù)時(shí)被初始化。
int
c=10;//C為局部變數(shù),具有動(dòng)態(tài)生存期,
//每次進(jìn)入函數(shù)時(shí)都初始化。
a=a+2;i=i+32;c=c+5;
cout<<"---OTHER---\n";
cout<<"i:"<<i
<<"a:"<<a
<<"b:"<<b
<<"c:"<<c
<<endl;
b=a;}運(yùn)行結(jié)果:---MAIN---
i:1
a:0b:-10c:0---OTHER---
i:33
a:4b:0c:15---MAIN---
i:33
a:0b:-10c:8---OTHER---
i:75
a:6b:4c:15例5-3:時(shí)鐘程式classClock //時(shí)鐘類聲明{public: //外部介面
Clock();
voidSetTime(intNewH,intNewM,intNewS);//三個(gè)形參均具有函數(shù)原型作用域
voidShowTime(); ~Clock(){}private: //私有數(shù)據(jù)成員
intHour,Minute,Second;};//時(shí)鐘類成員函數(shù)實(shí)現(xiàn)Clock::Clock()//構(gòu)造函數(shù){ Hour=0; Minute=0; Second=0;}voidClock::SetTime(intNewH,intNewM,intNewS){ Hour=NewH; Minute=NewM; Second=NewS;}voidClock::ShowTime(){
cout<<Hour<<":"<<Minute<<":"<<Second<<endl;}Clock
globClock;//聲明對(duì)象globClock,
//具有靜態(tài)生存期,檔作用域intmain() //主函數(shù){
cout<<"Firsttimeoutput:"<<endl;
//引用具有檔作用域的對(duì)象:
globClock.ShowTime();//對(duì)象的成員函數(shù)具有類作用域
globClock.SetTime(8,30,30); ClockmyClock(globClock);
//聲明具有塊作用域的對(duì)象myClock
cout<<"Secondtimeoutput:"<<endl; myClock.ShowTime(); //引用具有塊作用域的對(duì)象}程式
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45133-2025氣體分析混合氣體組成的測(cè)定基于單點(diǎn)和兩點(diǎn)校準(zhǔn)的比較法
- 信訪合同范本
- 單位采購(gòu)柜子合同范本
- 出售餐飲椅子合同范本
- 單位同意入職合同范本
- 出租轉(zhuǎn)讓吊車合同范本
- 個(gè)人購(gòu)買黃金合同范本
- 信息咨詢合作合同范本
- 農(nóng)資商店用工合同范本
- 單位用人聘用合同范本
- 蘇教版二年級(jí)下冊(cè)科學(xué)全冊(cè)教案
- 挖掘機(jī)操作收藏手冊(cè)
- 教育家精神專題講座課件
- 了解綠化廢棄物的分類和處理方法
- 節(jié)后復(fù)工安全教育培訓(xùn)內(nèi)容【5篇】
- EPC項(xiàng)目投標(biāo)人承包人工程經(jīng)濟(jì)的合理性分析、評(píng)價(jià)
- 項(xiàng)目投標(biāo)BIM方案(投標(biāo)專用)
- 2024年中考數(shù)學(xué)專題訓(xùn)練 專題10 截長(zhǎng)補(bǔ)短模型綜合應(yīng)用(知識(shí)解讀)
- 專利分析評(píng)議報(bào)告
- 基層工會(huì)經(jīng)費(fèi)收支管理講課稿課件
- 抗磷脂綜合征診療規(guī)范
評(píng)論
0/150
提交評(píng)論