講-簡(jiǎn)單程序設(shè)計(jì)_第1頁
講-簡(jiǎn)單程序設(shè)計(jì)_第2頁
講-簡(jiǎn)單程序設(shè)計(jì)_第3頁
講-簡(jiǎn)單程序設(shè)計(jì)_第4頁
講-簡(jiǎn)單程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第6講簡(jiǎn)單程序設(shè)計(jì)1.一、程序開發(fā)過程三個(gè)過程: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ī)器語言,擴(kuò)展名為.obj3、連接:連接程序?qū)⒔M成程序的所有.obj文件和用到的庫文件連接起來,形成一個(gè)完整的可執(zhí)行文件;程序的編譯以文件為單位進(jìn)行。當(dāng)程序由多個(gè)文件構(gòu)成時(shí),若對(duì)其中的一個(gè)文件的代碼進(jìn)行了修改,則只需編譯該文件,而無需編譯所有文件;可執(zhí)行文件頭文件頭文件頭文件源文件源文件源文件配置文件預(yù)編譯編譯連接C++程序開發(fā)過程2.二、文件之間的信息共享解決程序由多個(gè)文件組成時(shí),多個(gè)文件間如何共享問題引入外部變量和外部函數(shù)外部變量在變量名前加關(guān)鍵字extern說明為外部變量編譯器看到extern時(shí),說明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變量說明時(shí),必須保證組成同一程序的其它文件中有且只有一個(gè)對(duì)該變量的定義//main.cppintx;inty;void

main(){...}...//file1.cppextern

intx;inty;void

func1(){...}...//file2.cppextern

intx;extern

inty;extern

intz;void

func2(){...}...4.若在說明一個(gè)變量時(shí)加上了對(duì)變量的初始化,編譯器會(huì)當(dāng)成變量定義,而不當(dāng)成變量說明來使用;如:externintx=10;編譯器會(huì)忽略前面的extern,而將其當(dāng)成是對(duì)變量x的定義extern說明的變量必須是具有全局作用域,不能是函數(shù)的局部變量;5.2外部函數(shù)外部函數(shù)沒有局部函數(shù)和全局函數(shù)之分,C++中函數(shù)默認(rèn)是extern當(dāng)編譯器看到函數(shù)的原型后,就認(rèn)為在程序的某個(gè)文件將能找到該函數(shù)的定義,所以允許在說明這個(gè)函數(shù)原型的文件中使用該函數(shù)使用方法:在文件file1.cpp中定義如下:int

max(intx,inty){

return(x>y?x:y);}另一個(gè)文件中要使用,只需說明函數(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,一般只要直接說明函數(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é)封裝起來,這些實(shí)現(xiàn)細(xì)節(jié)無需其它文件了解,安全切簡(jiǎn)化了文件之間的接口;不同文件可以使用相同名稱的變量和函數(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);//外部變量說明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)類型定義:struct,enum,class,typedef...外部數(shù)據(jù)說明:externinti;externcharname[];常量定義:constintPI=3.1415926;注釋也可包含入下內(nèi)容全局變量定義靜態(tài)函數(shù)和靜態(tài)變量定義一般函數(shù)定義類的成員函數(shù)的定義13.預(yù)編譯指令條件編譯指令#if、#else、#elif、#endif、#ifdef、#ifndef和C++中的if語句類似預(yù)編譯器可根據(jù)條件決定保留或不保留程序文件中的某些內(nèi)容如:#ifndef_INC_MATH#define_INC_MATH...#endif/*_INC_MATH*/#ifndef_PI_#define_PI_constfloatPI=3.1415926#endif/*_PI_*/14.#define指令通常用來與條件編譯指令配套使用,定義與否可用ifdef或ifndef來測(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)行過程中生存的時(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ū):大小在程序開始運(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論