版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6講簡(jiǎn)單程序設(shè)計(jì)1.一、程序開(kāi)發(fā)過(guò)程三個(gè)過(guò)程:1、預(yù)編譯:預(yù)編譯程序負(fù)責(zé)處理組成程序的各個(gè)源文件和頭文件的預(yù)編譯指令,如#include、#define,將帶有預(yù)編譯指令的程序文件轉(zhuǎn)化為純粹的C++程序文件。頭文件的內(nèi)容被插入到源程序文件中。2、編譯:編譯程序?qū)++源程序翻譯成對(duì)應(yīng)的二進(jìn)制代碼,即二進(jìn)制機(jī)器語(yǔ)言,擴(kuò)展名為.obj3、連接:連接程序?qū)⒔M成程序的所有.obj文件和用到的庫(kù)文件連接起來(lái),形成一個(gè)完整的可執(zhí)行文件;程序的編譯以文件為單位進(jìn)行。當(dāng)程序由多個(gè)文件構(gòu)成時(shí),若對(duì)其中的一個(gè)文件的代碼進(jìn)行了修改,則只需編譯該文件,而無(wú)需編譯所有文件;可執(zhí)行文件頭文件頭文件頭文件源文件源文件源文件配置文件預(yù)編譯編譯連接C++程序開(kāi)發(fā)過(guò)程2.二、文件之間的信息共享解決程序由多個(gè)文件組成時(shí),多個(gè)文件間如何共享問(wèn)題引入外部變量和外部函數(shù)外部變量在變量名前加關(guān)鍵字extern說(shuō)明為外部變量編譯器看到extern時(shí),說(shuō)明extern后定義的變量不在本文件中定義,而在其它文件中定義//main.cpp#include<iostream.h>intx;void
main(){......}//file.cppextern
intx;void
func(){cout<<x;x=5;...}....3.注意事項(xiàng):當(dāng)文件中出現(xiàn)了一個(gè)extern變量說(shuō)明時(shí),必須保證組成同一程序的其它文件中有且只有一個(gè)對(duì)該變量的定義//main.cppintx;inty;void
main(){...}...//file1.cppextern
intx;inty;void
func1(){...}...//file2.cppextern
intx;extern
inty;extern
intz;void
func2(){...}...4.若在說(shuō)明一個(gè)變量時(shí)加上了對(duì)變量的初始化,編譯器會(huì)當(dāng)成變量定義,而不當(dāng)成變量說(shuō)明來(lái)使用;如:externintx=10;編譯器會(huì)忽略前面的extern,而將其當(dāng)成是對(duì)變量x的定義extern說(shuō)明的變量必須是具有全局作用域,不能是函數(shù)的局部變量;5.2外部函數(shù)外部函數(shù)沒(méi)有局部函數(shù)和全局函數(shù)之分,C++中函數(shù)默認(rèn)是extern當(dāng)編譯器看到函數(shù)的原型后,就認(rèn)為在程序的某個(gè)文件將能找到該函數(shù)的定義,所以允許在說(shuō)明這個(gè)函數(shù)原型的文件中使用該函數(shù)使用方法:在文件file1.cpp中定義如下:int
max(intx,inty){
return(x>y?x:y);}另一個(gè)文件中要使用,只需說(shuō)明函數(shù)原型int
max(int,int);等價(jià)于:extern
int
max(int,int);6.//main.cppvoid
print(char*);void
main(){print("Hello,friend\n");...}//file1.cpp#include<iostream.h>void
print(char*str){
cout<<str; ...}函數(shù)默認(rèn)是extern,一般只要直接說(shuō)明函數(shù)原型,就可以使用了7.3.靜態(tài)全局變量與靜態(tài)函數(shù)若不希望在一個(gè)文件中定義的某些變量或函數(shù)在其它文件中使用時(shí),可定義為靜態(tài)的(static),如:staticintx;staticintmax(int,int);使用static全局變量和static函數(shù)優(yōu)點(diǎn):可將一些文件的實(shí)現(xiàn)細(xì)節(jié)封裝起來(lái),這些實(shí)現(xiàn)細(xì)節(jié)無(wú)需其它文件了解,安全切簡(jiǎn)化了文件之間的接口;不同文件可以使用相同名稱(chēng)的變量和函數(shù)完成文件功能,而不用擔(dān)心名字沖突;內(nèi)聯(lián)函數(shù)默認(rèn)是靜態(tài)函數(shù),只在定義范圍內(nèi)有效用const定義的常量也具有靜態(tài)性,可在不同的文件中定義同名的常量;8./*=====文件main.cpp======*/#include<iostream.h>intcompare(int,int);floatcompare(float,float);voidmain(){ cout<<compare(13,4)<<endl; cout<<compare(2.3f,4.5f)<<endl;}/*=======file1.cpp=======*/staticintmax(int,int);intcompare(intval1,intval2){ if(val1==val2) return0; if(max(val1,val2)==val1)return1; else return-1;}intmax(inti,intj){ return(i>j)?i:j;}/*=====file2.cpp=======*/staticfloatmax(float,float);floatcompare(floatval1,floatval2){ if(val1==val2) return0; if(max(val1,val2)==val1)return1; else return-1;}floatmax(floati,floatj){ return(i>j)?i:j;}9.//main.cppexterninta;staticintb=3;externintsfunc(int)voidmain(){ inti=b; a=func(i); a=sfunc(i);}//文件func1.cppexternintb1intfunc(inti){ return(i*b);}staticintsfunc(inti){ return(i*b);}10.三、頭文件#include<文件名>#include"文件名"#include指令可以嵌套,可在一個(gè)頭文件中再有#include指令頭文件包含內(nèi)容的標(biāo)準(zhǔn)內(nèi)容是否可能要被多個(gè)文件使用,若只有一個(gè)文件內(nèi)容要使用,可直接將信息放到源文件中若多個(gè)文件包含這個(gè)頭文件,是否會(huì)引起沖突.若會(huì)引起沖突,則這樣的信息就不要放到頭文件中,如全局變量的定義,函數(shù)的定義;11./*math.h*///預(yù)編譯指令#ifndef_INC_MATH#define_INC_MATH//結(jié)構(gòu)定義struct_complex{ doublex,y;};//常量定義#define_DOMAIN1#define_SING2#define_OVERFLOW3//函數(shù)原型聲明int__cdec1abs(int);double__cdec1acos(double);double__cdec1asin(double);//外部變量說(shuō)明externdoubleHUGE;//內(nèi)聯(lián)函數(shù)定義inlinelongdoubleasco1(longdouble_X){ return(acos((double)_X));}inlinelongdoubleasin1(longdouble_X){ return(asin((double)_X)); }#endif/*_INC_MATH*/12.C++頭文件一般包含的內(nèi)容預(yù)編譯指令#define,#ifdef,#endif,#include函數(shù)聲明:intcalculate(int,int)內(nèi)聯(lián)函數(shù)定義:inlinefloatmin(float,float)類(lèi)型定義:struct,enum,class,typedef...外部數(shù)據(jù)說(shuō)明:externinti;externcharname[];常量定義:constintPI=3.1415926;注釋也可包含入下內(nèi)容全局變量定義靜態(tài)函數(shù)和靜態(tài)變量定義一般函數(shù)定義類(lèi)的成員函數(shù)的定義13.預(yù)編譯指令條件編譯指令#if、#else、#elif、#endif、#ifdef、#ifndef和C++中的if語(yǔ)句類(lèi)似預(yù)編譯器可根據(jù)條件決定保留或不保留程序文件中的某些內(nèi)容如:#ifndef_INC_MATH#define_INC_MATH...#endif/*_INC_MATH*/#ifndef_PI_#define_PI_constfloatPI=3.1415926#endif/*_PI_*/14.#define指令通常用來(lái)與條件編譯指令配套使用,定義與否可用ifdef或ifndef來(lái)測(cè)試;入:#define_NAME#ifdef_NAME#ifndef_NAME15.//main.cpp#include"func1.h"#include"func2.h"voidmain(){ abs(-4); acompare(3,-4);}//func1.cpp#include"func1.h"intabs(inti){ return(i>=0?i:-i);}//func1.h#ifndef_FUNC1_#define_FUNC1_intabs(int);#endif//func2.cpp#include"func2.h"intacompare(inti,intj){ returnabs(i)-abs(j);}//func2.h#ifndef_FUNC2_#define_FUNC2_#include"func1.h"intacompare(inti,intj);#endif//func1.cpp#include"func1.h"intabs(inti){ return(i>=0?i:-i);}//func1.h#ifndef_FUNC1_#define_FUNC1_intabs(int);#endif//func1.cppintabs(int);intabs(inti){return(i>=0)?i:-i;}//func2.cpp#include"func2.h"intacompare(inti,intj){ returnabs(i)-abs(j);}//func2.h#ifndef_FUNC2_#define_FUNC2_#include"func1.h"intacompare(inti,intj);#endif//func2.cppintabs(int);intacompare(inti,intj);intacompare(inti,intj){returnabs(i)–abs(j);}//main.cppintabs(int);intacompare(inti,intj);voidmain(){abs(-4);acompare(3,-4);}16.四、生存期標(biāo)識(shí)符在程序運(yùn)行過(guò)程中生存的時(shí)間,如:ex6.1int*pGlobal;void
func1();void
func2();void
main(){
func1();
func2();}void
func1(){
intx; pGlobal=
new
int;}void
func2(){
inty;
deletepGlobal;}17.生存期與內(nèi)存內(nèi)存空間分為:四個(gè)區(qū),不同生存期的變量存放的內(nèi)存區(qū)域不同代碼區(qū):全局?jǐn)?shù)據(jù)區(qū):大小在程序開(kāi)始運(yùn)行前就已確定,存放具有靜態(tài)生存期的變量,包括全局變量、靜態(tài)全局變量機(jī)、靜態(tài)局部變量等;堆區(qū):動(dòng)態(tài)申請(qǐng)的空間在堆中分配,具有動(dòng)態(tài)生存期的變量空間處于內(nèi)存堆中。棧區(qū):同樣,具有局部生存期的變量存放到棧區(qū)中;具有靜態(tài)生存期的變量由系統(tǒng)自動(dòng)初始化為0,而系統(tǒng)不對(duì)局部生存期和動(dòng)態(tài)生存期的變量進(jìn)行初始化;18.#include<iostream.h>inti;void
main(){
intj;
cout<<"Globalvariablei="<<i<<endl;
cout<<"Localvariablej="<<j<<endl;}Globalvariablei=0Localvariablej=200872002419.靜態(tài)局部變量函數(shù)的局部變量具有局部生存期,每次函數(shù)結(jié)束后,其局部狀態(tài)信
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年中國(guó)數(shù)字醫(yī)院管理系統(tǒng)市場(chǎng)調(diào)查研究報(bào)告
- 2024年開(kāi)拆除塵輸送機(jī)項(xiàng)目可行性研究報(bào)告
- 軟件開(kāi)發(fā)合同范本
- 健身私教服務(wù)合同
- 藝人簽約合同書(shū)范本
- 2025至2030年中國(guó)電話分線箱行業(yè)投資前景及策略咨詢(xún)研究報(bào)告
- 消防教育課程設(shè)計(jì)
- 2025年度智慧城市10KV配電工程標(biāo)準(zhǔn)化施工合同2篇
- 2025年度藝術(shù)品居間銷(xiāo)售合同示范文本3篇
- 二零二五年城市青年租房合同標(biāo)準(zhǔn)協(xié)議6篇
- 玻璃的浮法成型工藝
- 山東省濟(jì)南市2023-2024學(xué)年高三上學(xué)期期末學(xué)習(xí)質(zhì)量檢測(cè)物理試題(解析版)
- 國(guó)家開(kāi)放大學(xué)電大本科《古代小說(shuō)戲曲專(zhuān)題》2025期末試題及答案(試卷號(hào):1340)
- 粵教粵科版三年級(jí)科學(xué)上冊(cè)全冊(cè)單元期中期末測(cè)試卷 含答案
- 遼寧省大連市甘井子區(qū)2023-2024學(xué)年五年級(jí)上學(xué)期期末英語(yǔ)試卷
- (完整版)年產(chǎn)30萬(wàn)噸甲醇工藝設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 外研版五年級(jí)上冊(cè)(三起)連詞成句專(zhuān)項(xiàng)訓(xùn)練
- 養(yǎng)老機(jī)構(gòu)風(fēng)險(xiǎn)管控清單
- 辦公室消防管理制度
- 動(dòng)火作業(yè)審批表
- 浙江省紹興市諸暨市2023-2024學(xué)年數(shù)學(xué)三上期末達(dá)標(biāo)檢測(cè)試題含答案
評(píng)論
0/150
提交評(píng)論