版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
C++面向?qū)ο蟪绦蛟O(shè)計
C++面向?qū)ο蟪绦蛟O(shè)計第1章C++的初步知識第1章C++的初步知識主要內(nèi)容1.1從C到C++1.2最簡單的C++程序1.3C++對C的擴(kuò)充1.4C++程序的編寫和實現(xiàn)3主要內(nèi)容1.1從C到C++31972年,貝爾實驗室的DennisRitchie和Briankernighan在B語言的基礎(chǔ)上,作了進(jìn)一步的充實和完善,設(shè)計出了C語言。當(dāng)時,設(shè)計C語言是為了編寫UNIX操作系統(tǒng)的。以后,C語言經(jīng)過多次改進(jìn),并開始流行。C是吸收了其它語言的優(yōu)點逐步成為實用性很強(qiáng)的語言,而C++是在C語言的基礎(chǔ)上發(fā)展和完善的。1.1從C到C++41972年,貝爾實驗室的DennisRitchieC語言的主要特點是:1、C語言是一種結(jié)構(gòu)化的程序設(shè)計語言,語言本身簡潔、使用靈活方便。既適用于設(shè)計和編寫大的系統(tǒng)程序,又適用于編寫小的控制程序,也適用科學(xué)計算。2、它既有高級語言的特點,又具有匯編語言的特點。運算符豐富,除了提供對數(shù)據(jù)的算術(shù)邏輯運算外,還提供了二進(jìn)制的位運算。并且也提供了靈活的數(shù)據(jù)結(jié)構(gòu)。用C語言編寫的程序表述靈活方便,功能強(qiáng)大。用C語言開發(fā)的程序,其結(jié)構(gòu)性好,目標(biāo)程序質(zhì)量高,程序執(zhí)行效率高。51.1從C到C++C語言的主要特點是:2、它既有高級語言的特點,又具有匯編語言3、程序的可移植性好。用C語言在某一種型號的計算機(jī)上開發(fā)的程序,基本上可以不作修改,而直接移植到其它型號和不同檔次的計算機(jī)上運行。4、程序的語法結(jié)構(gòu)不夠嚴(yán)密,程序設(shè)計的自由度大。這對于比較精通C語言的程序設(shè)計者來說,可以設(shè)計出高質(zhì)量的非常通用的程序。但對于初學(xué)者來說,要能比較熟練運用C語言來編寫程序,并不是一件容易的事情。與其它高級語言相比而言,調(diào)試程序比較困難。往往是編好程序輸入計算機(jī)后,編譯時容易通過,而在執(zhí)行時還會出錯。但只要對C語言的語法規(guī)則真正領(lǐng)會,編寫程序及調(diào)試程序還是比較容易掌握的。61.1從C到C++3、程序的可移植性好。用C語言在某一種型號的計算機(jī)上開發(fā)的程隨著C語言應(yīng)用的推廣,C語言存在的一些缺陷或不足也開始流露出來,并受到大家的關(guān)注。如:C語言對數(shù)據(jù)類型檢查的機(jī)制比較弱;缺少支持代碼重用的結(jié)構(gòu);隨著軟件工程規(guī)模的擴(kuò)大,難以適應(yīng)開發(fā)特大型的程序等等。71.1從C到C++隨著C語言應(yīng)用的推廣,C語言存在的一些缺陷或不足也開始流露出為了克服C語言本身存在的缺點,并保持C語言簡潔、高效,與匯編語言接近的特點,根據(jù)面向?qū)ο蟮某绦蛟O(shè)計思想(OOP),1980年,貝爾實驗室的BjarneStroustrup博士及其同事對C語言進(jìn)行了改進(jìn)和擴(kuò)充,并把類的概念引入到C中。并在1983年由RickMaseitti提議正式命名為C++(CPlusPlus)。后來,又把運算符的重載、引用、虛函數(shù)等功能加入到C++中,使C++的功能日趨完善。81.1從C到C++為了克服C語言本身存在的缺點,并保持C語言簡潔、AT&T發(fā)布的第一個C++編譯系統(tǒng)是一個預(yù)編譯器,它把C++代碼轉(zhuǎn)換成C代碼,然后再用C編譯系統(tǒng)生成目標(biāo)代碼。1988產(chǎn)生第一個C++編譯系統(tǒng)1989C++2.0類的多重繼承1991C++3.0類的模板
C++4.0異常處理、命名空間1997ANSI發(fā)布C++標(biāo)準(zhǔn)91.1從C到C++AT&T發(fā)布的第一個C++編譯系統(tǒng)是一個預(yù)編譯器,它把C++ C++既可以用于面向過程的結(jié)構(gòu)化程序設(shè)計,也可用于面向?qū)ο蟮某绦蛟O(shè)計。
C++對C的增強(qiáng)體現(xiàn)在兩個方面:
1.對原來的面向過程機(jī)制做了擴(kuò)充。
2.增加了面向?qū)ο蟮臋C(jī)制。 學(xué)習(xí)C++之后,既可以進(jìn)行面向?qū)ο蟮某绦蛟O(shè)計,也可以進(jìn)行面向過程的程序設(shè)計。101.1從C到C++ C++既可以用于面向過程的結(jié)構(gòu)化程序設(shè)計,也可用于面向?qū)ο?.2最簡單的C++程序#include<iostream>//用cout輸出時需要用此頭文件usingnamespacestd;//使用命名空間stdintmain(){cout<<"ThisisaC++program.\n";
//上面用C++的方法輸出一行return0;}11例1.1輸出一行字符“ThisisaC++program.”。1.2最簡單的C++程序#include<iostre
(1)標(biāo)準(zhǔn)C++規(guī)定main函數(shù)必須聲明為int類型,如果程序正常運行,向操作系統(tǒng)返回一個零值,否則返回非零值,通常是-1。
(2)C++程序中可以用/*…*/做注釋,可以用//做注釋。前者可以做多行注釋,后者只做單行注釋。
(3)C++程序中常用cout、cin進(jìn)行輸出輸入,cout是C++定義的輸出流對象,<<是插入運算符。121.2最簡單的C++程序 (1)標(biāo)準(zhǔn)C++規(guī)定main函數(shù)必須聲明為int類型,如果(4)使用cout、cin需要用頭文件iostream,在程序開始要用#include聲明包含的頭文件。(5)usingnamespacestd;意思是使用命名空間。C++標(biāo)準(zhǔn)庫中的類和函數(shù)是在命名空間std中聲明的,因此程序中如用C++標(biāo)準(zhǔn)庫中的有關(guān)內(nèi)容(此時需要用#include命令行),就要用usingnamespacestd;語句聲明。131.2最簡單的C++程序(4)使用cout、cin需要用頭文件iostream,在程#include<iostream>//預(yù)處理命令usingnamespacestd;//使用命名空間stdintmain()//主函數(shù)首部{//函數(shù)體開始inta,b,sum;//定義變量cin>>a>>b;//輸入語句sum=a+b;//賦值語句cout<<"a+b="<<sum<<endl;//輸出語句return0;//如程序正常結(jié)束,返回一個零值}14
例1.2求a和b兩個數(shù)之和1.2最簡單的C++程序#include<iostream>//cin是C++定義的輸入流對象。”>>”是提取運算符,與cin配合,其作用是從輸入設(shè)備中提取數(shù)據(jù)送到輸入流cin中。在程序執(zhí)行時,鍵盤輸入的第一個數(shù)據(jù)賦予a,第二個數(shù)據(jù)賦予b。cout語句中的endl是C++控制符常數(shù),作用是讓光標(biāo)換行。151.2最簡單的C++程序cin是C++定義的輸入流對象?!?gt;>”是提取運算符,與c#include<iostream>usingnamespacestd;intmain(){intmax(intx,inty)
;//對max函數(shù)作聲明
inta,b,c;cin>>a>>b;c=max(a,b);//調(diào)用max函數(shù)
cout<<"max="<<c<<endl;return0;}16例1.3求兩個數(shù)中的大數(shù)#include<iostream>16例1.3求兩個intmax(intx,inty)//定義max函數(shù){intz;if(x>y)z=x;elsez=y;return(z);}
171.2最簡單的C++程序intmax(intx,inty)例1.4包含類的C++程序#include<iostream>usingnamespacestd;classStudent//聲明一個類,類名為Student{private://以下為類中的私有部分
intnum;//私有變量numintscore;//私有變量scorepublic://以下為類中公用部分
voidsetdata()//定義公用函數(shù)setdata{cin>>num;//輸入num的值
cin>>score;}//輸入score的值
voiddisplay()//定義公用函數(shù)display{cout<<"num="<<num<<endl;//輸出num的值
cout<<"score="<<score<<endl;};//輸出score的值};//類的聲明結(jié)束181.2最簡單的C++程序例1.4包含類的C++程序181.2最簡單的C++程序Studentstud1,stud2;//定義stud1和stud2為Student類的變量,稱為對象intmain()//主函數(shù)首部{stud1.setdata();//調(diào)用對象stud1的setdata函數(shù)
stud2.setdata();//調(diào)用對象stud2的setdata函數(shù)
stud1.display();//調(diào)用對象stud1的display函數(shù)
stud2.display();//調(diào)用對象stud1的display函數(shù)
return0;}191.2最簡單的C++程序Studentstud1,stud2;191.2程序中聲明一個被稱為類的類型Student。聲明時要用關(guān)鍵字class。C++類中可以包含兩種成員即數(shù)據(jù)(如變量num、score)和函數(shù)(如setdata函數(shù)和display函數(shù))。分別稱為數(shù)據(jù)成員和成員函數(shù)。在C++中將一組數(shù)據(jù)和訪問這組數(shù)據(jù)的函數(shù)封裝在一起,組成類。一個類是由一組數(shù)據(jù),一組對其訪問的若干函數(shù),以及數(shù)據(jù)和函數(shù)的訪問屬性組成的。在前面程序中看到的private(私有)public(公有)保留字代表數(shù)據(jù)和函數(shù)的訪問屬性。201.2最簡單的C++程序程序中聲明一個被稱為類的類型Student。聲明時要用關(guān)鍵字凡是指定為公有的數(shù)據(jù)和函數(shù),既可由本類的函數(shù)訪問和調(diào)用,也可由其他函數(shù)或語句訪問和調(diào)用;凡是指定為私有的數(shù)據(jù)和函數(shù),通常只能由本類的函數(shù)訪問和調(diào)用。程序中“Studentstud1,stud2;”是一個定義語句,定義兩個Student類型變量stud1和stud2,Student類與int一樣是C++的合法類型。211.2最簡單的C++程序凡是指定為公有的數(shù)據(jù)和函數(shù),既可由本類的函數(shù)訪問和調(diào)用,也可具有類類型的變量稱為對象。Student的對象stud1,stud2具有同樣的結(jié)構(gòu)和特征。在類外調(diào)用成員函數(shù)時必須在函數(shù)名前冠以類的名稱。
221.2最簡單的C++程序具有類類型的變量稱為對象。Student的對象stud1,主函數(shù)中第一條語句輸入學(xué)生1的學(xué)號和成績,第二條語句輸入學(xué)生2的學(xué)號和成績,第三條語句輸出學(xué)生1的學(xué)號和成績,第四條語句輸出學(xué)生2的學(xué)號和成績。程序運行情況如下:100198.5<回車>100276.5<回車>num=1001Score=98.5num=1002Score=76.5231.2最簡單的C++程序主函數(shù)中第一條語句輸入學(xué)生1的學(xué)號和成績,第二條語句輸入學(xué)生為了與C兼容,C++保留了C語言中的一些規(guī)定,例如頭文件的文件名,以C語言里頭文件的擴(kuò)展名是.h,許多C++編譯系統(tǒng)保留了這種擴(kuò)展名,近年推出的C++編譯系統(tǒng)新版本,推出了一批不帶擴(kuò)展名的頭文件如iostream,string,cmath等。為了兼容C++仍允許使用帶擴(kuò)展名的頭文件。由于C語言無命名空間,因此使用帶擴(kuò)展名的頭文件時不用usingnamespacestd。241.2最簡單的C++程序為了與C兼容,C++保留了C語言中的一些規(guī)定,例如頭文件的1.3C++對C的擴(kuò)充C++既可用于面向過程的程序設(shè)計,也可用于面向?qū)ο蟪绦蛟O(shè)計。C++繼承了C語言提供的絕大部分功能和語法規(guī)定,并在此基礎(chǔ)上作了擴(kuò)充。251.3C++對C的擴(kuò)充C++既可用于面向過程的程序設(shè)計,1.3.1C++的輸入和輸出1.3.2用const定義常變量1.3.3函數(shù)原型聲明1.3.4函數(shù)的重載1.3.5函數(shù)模板1.3.6有默認(rèn)參數(shù)的函數(shù)1.3.7變量的引用1.3.8內(nèi)置函數(shù)1.3.9作用域運算符1.3.10字符串變量1.3.11動態(tài)分配/回收內(nèi)存運算符261.3C++對C的擴(kuò)充1.3.1C++的輸入和輸出261.3C++對C的1.3.1C++的輸入輸出C++為了方便使用,除了可以利用printf和scanf函數(shù)進(jìn)行輸入和輸出外,還增加了標(biāo)準(zhǔn)輸入流輸出流cin和cout。它們是在頭文件iostream中定義的,標(biāo)準(zhǔn)流是不需要打開文件和關(guān)閉文件就能直接操作的流式文件,在此標(biāo)準(zhǔn)輸入流是指從鍵盤上輸入的數(shù)據(jù),標(biāo)準(zhǔn)輸出流是指向屏幕輸出的數(shù)據(jù)流。271.3.1C++的輸入輸出C++為了方便使用,除了可以1.用cout進(jìn)行輸出格式:cout<<表達(dá)式1[<<表達(dá)式2……]功能:由左向右逐個計算表達(dá)式的值,將其插入到輸出流cout中。cout必須與輸出運算符<<一起使用,每個<<后跟一個表達(dá)式,<<運算符的結(jié)合方向是從左向右,所以各個表達(dá)式的值按從左到右的順序插入到輸出流中。281.用cout進(jìn)行輸出格式:28For(k=1;k<=3;k++)cout<<“k=“<<k<<endlendl是C++輸出流的常數(shù),在頭文件iostream中定義,代表讓光標(biāo)換行。在C++中也可以用”\n”控制光標(biāo)換行。所以輸出語句也可寫成:cout<<“k=“<<k<<“\n”29For(k=1;k<=3;k++)292.用cin進(jìn)行輸入格式:cin>>變量1[>>變量2……]>>是C++的提取運算符,表示從標(biāo)準(zhǔn)輸入設(shè)備取得數(shù)據(jù),賦予其后的變量。從鍵盤輸入數(shù)值數(shù)據(jù)時,兩個數(shù)據(jù)之間用空格分隔或用回車分隔。302.用cin進(jìn)行輸入格式:30inta;floatbcin>>a>>b;從鍵盤輸入2032.45<回車>31inta;floatb31例1.5cin和cout的使用#include<iostream>usingnamespacestd;intmain(){cout<<"pleaseenteryournameandage:"<<endl;
charname[10];intage;cin>>name;cin>>age;cout<<"yournameis"<<name<<endl;cout<<"yourageis"<<age<<endl;return0;}32例1.5cin和cout的使用#include<iost1.3.2用const定義常變量格式:const類型變量名=常數(shù)例:constfloatPI=3.14159;331.3.2用const定義常變量格式:331.3.3函數(shù)原型聲明C++規(guī)定,如果函數(shù)調(diào)用在函數(shù)定義之前,要求在調(diào)用之前必須聲明該函數(shù)的原型。格式:函數(shù)類型函數(shù)名(形參表);形參表中形參可以只寫類型。例:intmax(intx,inty);或intmax(int,int);其實C++編譯時,只檢查參數(shù)的數(shù)據(jù)類型。341.3.3函數(shù)原型聲明C++規(guī)定,如果函數(shù)調(diào)用在函數(shù)定義之1.3.4函數(shù)的重載C++允許在同一個域中用一個函數(shù)名定義多個函數(shù),這些函數(shù)的參數(shù)個數(shù)、參數(shù)類型不相同。用一個函數(shù)名實現(xiàn)不同的功能,就是函數(shù)的重載。例1.6設(shè)計程序計算三個數(shù)中的大數(shù)351.3.4函數(shù)的重載C++允許在同一個域中用一個函數(shù)名定義#include<iostream>usingnamespacestd;intmax(inta,intb,intc){if(b>a)a=b;if(c>a)a=c;returna;}floatmax(floata,floatb,floatc){if(b>a)a=b;if(c>a)a=c;returna;}longmax(longa,longb,longc){if(b>a)a=b;if(c>a)a=c;returna;}36#include<iostream>36intmain(){inta,b,c;floatd,e,f;longg,h,i;cin>>a>>b>>c;cin>>d>>e>>f;cin>>g>>h>>i;intm;m=max(a,b,c);//函數(shù)值為整型cout<<"max_i="<<m<<endl;floatn;n=max(d,e,f);//函數(shù)值為實型cout<<"max_f="<<n<<endl;longintp;p=max(g,h,i);//函數(shù)值為長整型cout<<"max_l="<<p<<endl;return0;}37intmain()37例1.7下面的例子說明用函數(shù)重載設(shè)計參數(shù)個數(shù)不同的函數(shù),用一個函數(shù)名求兩個整數(shù)或三個整數(shù)中的最大數(shù)。#include<iostream>usingnamespacestd;intmax(inta,intb,intc)//求3個整數(shù)中的最大者{if(b>a)a=b;if(c>a)a=c;returna;}38例1.7下面的例子說明用函數(shù)重載設(shè)計參數(shù)個數(shù)不同的函數(shù),用intmax(inta,intb)//求兩個整數(shù)中的最大者{if(a>b)returna;elsereturnb;}intmain(){inta=7,b=-4,c=9;cout<<max(a,b,c)<<endl;//輸出3個整數(shù)中的最大者
cout<<max(a,b)<<endl;//輸出兩個整數(shù)中的最大者
return0;}39intmax(inta,intb)
注意:不允許函數(shù)參數(shù)個數(shù)、參數(shù)類型都相同,只是函數(shù)返回值不同。因為系統(tǒng)無法從調(diào)用形式上判斷調(diào)用與哪個函數(shù)相匹配。40 注意:不允許函數(shù)參數(shù)個數(shù)、參數(shù)類型都相同,只是函數(shù)返回值不1.3.5函數(shù)模板如果兩個函數(shù)的參數(shù)個數(shù)相同,函數(shù)的行為相同(做同樣的事),只是函數(shù)和參數(shù)的數(shù)據(jù)類型不同,如果用函數(shù)重載的話,編寫的函數(shù)代碼是相同的,為了節(jié)省時間,C++提供了函數(shù)模板功能。格式:
template<typename標(biāo)識符[,typename標(biāo)識符,……]>
函數(shù)定義(函數(shù)的類型和參數(shù)的類型用聲明的標(biāo)識符表示)411.3.5函數(shù)模板如果兩個函數(shù)的參數(shù)個數(shù)相同,函數(shù)的行為相 template
是關(guān)鍵字,含義是模板
typename
是關(guān)鍵字,表示其后的標(biāo)識符代表類型參數(shù),調(diào)用時根據(jù)實參的類型確定形參的類型。 所謂函數(shù)模板,是建立一個通用函數(shù),不指定函數(shù)類型和參數(shù)類型,而用一個虛擬的類型表示。在調(diào)用函數(shù)時,用實參的類型取代模板中的虛擬類型。42 例1.8為計算兩個數(shù)中的大數(shù)定義函數(shù)模板 template是關(guān)鍵字,含義是模板42 例1.8#include<iostream>usingnamespacestd;template<typenameT>Tmax(Ta,Tb,Tc)//用虛擬類型T表示類型{if(b>a)a=b;if(c>a)a=c;returna;}43#include<iostream>43intmain(){inti1=8,i2=5,i3=6,i;doubled1=56.9,d2=90.765,d3=43.1,d;longg1=67843,g2=-456,g3=78123,g;i=max(i1,i2,i3);d=max(d1,d2,d3);g=max(g1,g2,g3);cout<<"i_max="<<i<<endl;cout<<"d_max="<<d<<endl;cout<<"g_max="<<g<<endl;return0;}44intmain()44從程序中看到,此問題用函數(shù)模板比用函數(shù)重載更方便。注意,函數(shù)模板只適用于函數(shù)參數(shù)的個數(shù)相同而類型不同,并且函數(shù)體相同的情況,如果函數(shù)的參數(shù)個數(shù)不同,則不能用函數(shù)模板。45從程序中看到,此問題用函數(shù)模板比用函數(shù)重載更方便。注意,函數(shù)1.3.6有默認(rèn)參數(shù)的函數(shù) C++允許為函數(shù)的參數(shù)設(shè)置默認(rèn)值,這時調(diào)用函數(shù)時,如果沒有實參,就以默認(rèn)值作為實參值。
46格式: 形參類型形參變量名=常數(shù) 功能:調(diào)用函數(shù)時,如果沒有實參,就以常數(shù)作為該形參的值;如果有實參,仍以實參的值作為該形參的值。
注意:有默認(rèn)值的形參必須放在形參表的右邊,不允許無默認(rèn)參數(shù)值和有默認(rèn)參數(shù)值的形參交錯排列。1.3.6有默認(rèn)參數(shù)的函數(shù) C++允許為函數(shù)的參數(shù)設(shè)置默認(rèn)
例:編寫計算圓柱體體積函數(shù)
floatvolume(floath,floatr=12.5)
調(diào)用可以采用以下任何一種形式:
volume(45.6); volume(32.5,10.5);
函數(shù)參數(shù)結(jié)合從左到右,用第一種方式調(diào)用時,只有一個實參,圓半徑的值取默認(rèn)值12.5,用第二種方式調(diào)用時,有兩個實參,圓半徑的值取實參的值10.5。47 例:編寫計算圓柱體體積函數(shù)47注意:一、如果用函數(shù)原型聲明,只要在函數(shù)原型聲明中定義形參的默認(rèn)值即可。二、一個函數(shù)名不能同時用于重載函數(shù)和帶默認(rèn)形參值的函數(shù)。當(dāng)調(diào)用函數(shù)時,如少寫一個參數(shù),系統(tǒng)無法判斷是利用重載函數(shù)還是利用帶默認(rèn)參數(shù)值的函數(shù),出現(xiàn)二義性。48注意:48例如將例1.7中的第三行改為intmax(inta,intb,intc=100);此時max是重載函數(shù),又帶默認(rèn)參數(shù)值,如果出現(xiàn)max(5,23)形式的調(diào)用,編譯系統(tǒng)無法斷定調(diào)用哪個函數(shù),于是發(fā)出編譯出錯的信息。49例如將例1.7中的第三行改為491.3.7變量的引用C++提供了為變量取別名的功能,這就是變量的引用。格式:類型&變量1=變量2變量2是在此之前已經(jīng)定義過的變量,且與變量1的類型相同。這里為變量2定義一個別名變量1,在程序里變量1和變量2就是同一個變量。注意:兩個變量不能用同一個別名。501.3.7變量的引用C++提供了為變量取別名的功能,這就是
例:inta=3,b=4; int&c=a;//c是a的別名
int&c=b;//錯誤的用法
一個變量可以有多個別名
例:inta=3; int&b=a; int&c=b;
變量a有兩個別名b和c。51 例:inta=3,b=4;51#include<iostream>usingnamespacestd;intmain(){inta=10;int&b=a;//聲明b是a的引用
a=a*a;cout<<a<<""<<b<<endl;b=b/5;cout<<b<<""<<a<<endl;return0;}52#include<iostream>52圖1.1程序運行結(jié)果如下:
100202053圖1.1程序運行結(jié)果如下:53將引用作為函數(shù)參數(shù) C++除了可以用普通變量、指針變量做形參外,還可以用引用變量做形參。
54(1)用普通變量做形參
這時傳遞的是實參的值,在函數(shù)內(nèi)形參與實參是兩個不同的內(nèi)存單元,對形參的修改不會影響實參的值。將引用作為函數(shù)參數(shù) C++除了可以用普通變量、指針變量做形#include<iostream>usingnamespacestd;voidswap(inta,intb){inttemp;temp=a;a=b;b=temp;//實現(xiàn)a和b的值互換}55#include<iostream>55intmain(){inti=3,j=5;swap(i,j);cout<<i<<","<<j<<endl;//i和j的值未互換
return0;}56 例1.10無法實現(xiàn)兩個變量的值互換的程序intmain()56 例1.10無法實現(xiàn)兩個變量的值互圖1.257圖1.257
(2)用指針變量做形參
58C語言還允許用指針變量做形參,這時傳遞的是實參變量的地址(指針),在函數(shù)內(nèi)利用這個指針訪問實參變量。 例1.11用指針變量做形參,實現(xiàn)兩個變量值的交換。 (2)用指針變量做形參58C語言還允許用指針變#include<iostream>usingnamespacestd;voidswap(int*p1,int*p2){inttemp;temp=*p1;*p1=*p2;*p2=temp;}59#include<iostream>59intmain(){inti=3,j=5;swap(&i,&j);cout<<i<<","<<j<<endl;return0;}60intmain()60圖1.3
61圖1.361(3)用引用變量做形參用指針變量做形參,它將實參變量的地址傳遞給形參,在函數(shù)內(nèi)用“*指針變量”的方式訪問實參變量。我們知道引用變量是變量的別名,在調(diào)用函數(shù)時,用引用變量做的形參就成了實參變量的別名,在函數(shù)中用的形參名就是實參的別名,這樣比用指針變量更直觀、更方便。62(3)用引用變量做形參62例1.12利用引用變量實現(xiàn)兩個變量值的交換#include<iostream>usingnamespacestd;voidswap(int&a,int&b){inttemp;temp=a;a=b;b=temp;}63例1.12利用引用變量實現(xiàn)兩個變量值的交換63intmain(){inti=3,j=5;swap(i,j);cout<<"i="<<i<<""<<"j="<<j<<endl;return0;}64intmain()64圖1.4
65圖1.465對引用的進(jìn)一步說明(1)引用變量都具有非void類型(2)不能建立引用的數(shù)組(3)可以將變量的引用的地址賦給一個指針,則指針指向原來的變量。inta=3;int&b=a;int*p=&b;//相當(dāng)于p指向a66對引用的進(jìn)一步說明(1)引用變量都具有非void類型66(4)可以建立指針變量的引用變量例:inti; int*p=&i; int*&pt=p;//pt是p的別名變量,同時也是指針變量(5)可以建立常引用變量,不允許修改常引用變量的值例:inti; constint&a=i; a=3;//錯誤的用法
i=8;//i不是常變量,可以修改67(4)可以建立指針變量的引用變量67(6)可以用常量或表達(dá)式對引用進(jìn)行初始化,但此時必須用const作聲明。例:inti=5; const&a=i+3;68(6)可以用常量或表達(dá)式對引用進(jìn)行初始化,但此時必須用con1.3.8內(nèi)置函數(shù) C++提供了一種機(jī)制,在編譯時,將所調(diào)用的函數(shù)的代碼嵌入到調(diào)用函數(shù)代碼中,在執(zhí)行函數(shù)時省去了調(diào)用環(huán)節(jié),提高了函數(shù)的執(zhí)行速度。這種機(jī)制稱為內(nèi)置函數(shù),有的書稱內(nèi)聯(lián)函數(shù)。
69格式:
inline
函數(shù)類型函數(shù)名(形參表) {函數(shù)體} inline是C++的關(guān)鍵字,在編譯時,編譯程序會把這個函數(shù)嵌入到調(diào)用函數(shù)的函數(shù)體中 調(diào)用格式:函數(shù)名(實參表)1.3.8內(nèi)置函數(shù) C++提供了一種機(jī)制,在編譯時,將所例1.13計算三個整數(shù)中的大數(shù)#include<iostream>usingnamespacestd;inlineintmax(inta,intb,intc)//這是一個內(nèi)置函數(shù),
//求3個整數(shù)中的最大者{if(b>a)a=b;if(c>a)a=c;returna;}intmain(){inti=7,j=10,k=25,m;m=max(i,j,k);cout<<"max="<<m<<endl;return0;}70例1.13計算三個整數(shù)中的大數(shù)70
由于在定義函數(shù)時指定它是內(nèi)置函數(shù),因此編譯系統(tǒng)在遇到函數(shù)調(diào)用max(i,j,k)時就用max函數(shù)體的代碼代替max(i,j,k),同時用實參代替形參。調(diào)用語句m=max(i,j,k)就被置換成:
{a=i;b=j;c=k; if(b>a)a=b; if(c>a)a=c; m=a; }71 由于在定義函數(shù)時指定它是內(nèi)置函數(shù),因此編譯系統(tǒng)在遇到函數(shù)調(diào)例1.15用內(nèi)置函數(shù)計算平方根#include<iostream>usingnamespacestd;inlineintpower(intx)//定義內(nèi)置函數(shù){returnx*x;}intmain(){cout<<power(2)<<endl;cout<<power(1+1)<<endl;return0;}72例1.15用內(nèi)置函數(shù)計算平方根72編譯程序遇見內(nèi)置函數(shù)power時,先求出函數(shù)的實參值(1+1=2),然后用power函數(shù)體代替函數(shù)調(diào)用,調(diào)用語句變成:
{cout<<2*2<<endl; cout<<2*2<<endl; }
運行結(jié)果是
4 473編譯程序遇見內(nèi)置函數(shù)power時,先求出函數(shù)的實參值(1+1
使用內(nèi)置函數(shù)可以節(jié)省程序的運行時間,但增加了目標(biāo)程序的長度。所以在使用時要衡量時間和空間的得失。74 使用內(nèi)置函數(shù)可以節(jié)省程序的運行時間,但增加了目標(biāo)程序的長度1.3.9作用域運算符
并不是所有的變量在程序運行的時時刻刻都是可見的。有的變量在整個程序運行期間都是可見的,稱它們?yōu)槿肿兞?;有的變量只能在一個函數(shù)中可知,被稱為局部變量。 每個變量都有其有效的作用域,程序只能在變量的有效的作用域內(nèi)使用變量,不能直接使用其他域中的變量。
751.3.9作用域運算符 并不是所有的變量在程序運行的時時刻程序的內(nèi)存區(qū)域程序的內(nèi)存空間代碼區(qū)全局?jǐn)?shù)據(jù)區(qū)堆區(qū)棧區(qū)程序中各個函數(shù)的代碼程序中全局?jǐn)?shù)據(jù)和靜態(tài)數(shù)據(jù)程序中的動態(tài)數(shù)據(jù)程序中各函數(shù)內(nèi)的數(shù)據(jù)76程序的內(nèi)存區(qū)域程序的內(nèi)存空間代碼區(qū)全局?jǐn)?shù)據(jù)區(qū)堆區(qū)棧區(qū)程序中各例1.16局部變量和全局變量同名
#include<iostream> usingnamespacestd; floata=13.5; intmain() {inta=5; cout<<a<<endl; return0;}77例1.16局部變量和全局變量同名77程序中有兩個變量a,一個是全局變量,另一個是main函數(shù)的局部變量,根據(jù)局部變量會屏蔽同名的全局變量規(guī)則,在函數(shù)中出現(xiàn)的變量a是局部變量,因此輸出的值是5,而不是13.5,為了在函數(shù)中訪問全局變量C++提供了作用域運算符::
,可以用來指定要訪問的作用域,可以把main函數(shù)改寫成78程序中有兩個變量a,一個是全局變量,另一個是main函數(shù)的局 #include<iostream> usingnamespacestd; floata=13.5; intmain() {inta=5; cout<<a<<endl; cout<<::a<<endl; return0; } ::a表示全局變量a。注意不能用::訪問局部變量。79 #include<iostream>791.3.10字符串變量 C++提供了字符串類類型string,實際上它不是C++的基本類型,它是在C++標(biāo)準(zhǔn)庫中聲明的一個字符串類,程序可以用它定義對象。
80可以在定義變量時用字符串常量為變量賦初值:
string變量名=字符串常量 注意:如用字符串變量,在程序開始要用包含語句把C++標(biāo)準(zhǔn)庫的string頭文件包含進(jìn)來。1.定義字符串變量格式:string變量名表;1.3.10字符串變量 C++提供了字符串類類型strin2.對字符串操作①對字符串變量賦值 字符串變量=字符串表達(dá)式例:stringst1,st2; st1=“王點點“; st2=st1;812.對字符串操作81②訪問字符串中的字符C++允許把字符串作為字符數(shù)組,第一個字符的下標(biāo)是0,第二個字符的下標(biāo)是1,以此類推。例:stringw=“then”; w[2]=‘a(chǎn)’;結(jié)果字符串w變成than82②訪問字符串中的字符82③輸入輸出字符串格式:cin>>字符串變量
cout<<字符串變量83③輸入輸出字符串83④字符串連接運算格式:字符串1+字符串2功
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年電動消聲止回閥項目可行性研究報告
- 2025年中國補(bǔ)光膜市場調(diào)查研究報告
- 2025年四川火鍋炒面項目可行性研究報告
- 《民樂欣賞》課件
- 2025至2030年草編結(jié)工藝品項目投資價值分析報告
- 一年級數(shù)學(xué)計算題專項練習(xí)匯編
- 五年級數(shù)學(xué)(小數(shù)乘法)計算題專項練習(xí)及答案匯編
- 倉儲物流用地居間服務(wù)合同
- 汽車裝飾品運輸服務(wù)協(xié)議
- 文化創(chuàng)意園區(qū)渣土清運協(xié)議
- 帶狀皰疹護(hù)理查房課件整理
- 年月江西省南昌市某綜合樓工程造價指標(biāo)及
- 奧氏體型不銹鋼-敏化處理
- 作物栽培學(xué)課件棉花
- 交通信號控制系統(tǒng)檢驗批質(zhì)量驗收記錄表
- 弱電施工驗收表模板
- 絕對成交課件
- 探究基坑PC工法組合鋼管樁關(guān)鍵施工技術(shù)
- 國名、語言、人民、首都英文-及各地區(qū)國家英文名
- API SPEC 5DP-2020鉆桿規(guī)范
- 組合式塔吊基礎(chǔ)施工專項方案(117頁)
評論
0/150
提交評論