




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第2章C++語(yǔ)言對(duì)C語(yǔ)言的擴(kuò)充2.1C++的特點(diǎn)2.2C++語(yǔ)言的文件擴(kuò)展名2.3注釋符2.4名字空間2.5C++語(yǔ)言的輸入輸出2.6變量的定義2.7強(qiáng)制類型轉(zhuǎn)換2.8動(dòng)態(tài)內(nèi)存的分配與釋放2.9作用域運(yùn)算符::2.10引用2.11const修飾符2.12字符串2.13C++語(yǔ)言中函數(shù)的新特性習(xí)題2.1C++語(yǔ)言的特點(diǎn)
C++語(yǔ)言保留了C語(yǔ)言的有效性、靈活性、便于移植等特點(diǎn),又添加了面向?qū)ο缶幊痰闹С?。編?xiě)出的程序具有結(jié)構(gòu)清晰、易于擴(kuò)充、程序可讀性好,生成的代碼質(zhì)量高,運(yùn)行效率僅比匯編語(yǔ)言慢10%~20%。2.2C++語(yǔ)言的文件擴(kuò)展名
C++語(yǔ)言體系規(guī)定用“.cpp”作為C++語(yǔ)言源文件的擴(kuò)展名以區(qū)別于C語(yǔ)言用的“.C”文件擴(kuò)展名。
C語(yǔ)言用的頭文件(擴(kuò)展名“.h”)在C++語(yǔ)言中仍然保留,標(biāo)準(zhǔn)C++語(yǔ)言的頭文件是沒(méi)有.h的
。2.3注釋符
1.段注釋:/*…*/2.單行注釋://當(dāng)只做單行注釋時(shí)便可用“//”符號(hào)表示從此符號(hào)起至行尾均為行注釋內(nèi)容。
3.程序編譯時(shí)將忽略所有的注釋內(nèi)容。2.4名字空間(namespace)
C++語(yǔ)言中的名字空間是一種描述邏輯分組的機(jī)制。如果有一些聲明按照某種準(zhǔn)則在邏輯上屬于同一個(gè)集團(tuán),就可以將它們放在同一個(gè)名字空間,并以關(guān)鍵字namespace開(kāi)頭給它起一個(gè)名字:namespacens1{floata,b,c;fun1(){……}}標(biāo)準(zhǔn)C++庫(kù)中的所有組件都是在一個(gè)被稱為std的名字空間中聲明和定義的。使用標(biāo)準(zhǔn)C++庫(kù)中的組件,只要寫(xiě)一個(gè)using指示符:
usingnamespacestd;
就可以直接使用標(biāo)準(zhǔn)C++庫(kù)中的所有成員。
注意:如果使用了名空間std,則在使用#include編譯預(yù)處理命令包含頭文件時(shí),必須去掉頭文件的擴(kuò)展名.h,否則會(huì)出錯(cuò)。2.5C++語(yǔ)言的輸入輸出cout<<“輸出內(nèi)容”<<…;
//cout為標(biāo)準(zhǔn)輸出流對(duì)象(默認(rèn)輸出到顯示器)cin>>“輸入內(nèi)容”>>…;
//cin為標(biāo)準(zhǔn)輸入流對(duì)象(默認(rèn)從鍵盤(pán)輸入)#include<iostream.h>或#include<iostream>usingnamespacestd;【例2.1】C++的輸入輸出舉例。#include<iostream>//使用名空間std,則必須去掉.h擴(kuò)展名usingnamespacestd;voidmain(){charname[10];
intage;
cout<<"pleaseinputyourname:";
cin>>name;
cout<<"Howoldareyou:";
cin>>age;
cout<<"nameis"<<name<<endl;
cout<<"ageis"<<age<<endl;}2.6變量的定義
C++在變量的定義上作了兩種較大的改變。一、允許變量的定義語(yǔ)句可以出現(xiàn)在程序的任何位置,增強(qiáng)程序的可讀性。二、允許直接使用結(jié)構(gòu)體名定義變量?!纠?.2】C++的變量定義舉例。#include<iostream>usingnamespacestd;voidmain(){ structstudent {
intno; floatmath; };
intn;
cin>>n; studentwang;
wang.no=n;
cin>>wang.math;
cout<<wang.no<<""<<wang.math<<endl;}2.7強(qiáng)制類型轉(zhuǎn)換格式:(數(shù)據(jù)類型)(表達(dá)式)數(shù)據(jù)類型(表達(dá)式)通過(guò)強(qiáng)制類型轉(zhuǎn)換,得到一個(gè)所需類型的中間值。原來(lái)表達(dá)式的值類型并未改變。如下列代碼段:int
b;floatf;f=float(b);2.8動(dòng)態(tài)內(nèi)存的分配與釋放1.new運(yùn)算符
指針變量=new數(shù)據(jù)類型;new從堆內(nèi)存中為程序分配可以保存某種類型數(shù)據(jù)的一塊內(nèi)存空間,并返回指向該內(nèi)存的首地址,該地址存放于指針變量中。
2.delete運(yùn)算符運(yùn)算符delete用于釋放new分配的內(nèi)存空間,它的使用形式為:delete指針變量;其中的指針變量保存著new動(dòng)態(tài)分配的內(nèi)存的首地址。3.注意:用new獲取的內(nèi)存空間,必須用delete進(jìn)行釋放;#include<iostream>usingnamespacestd;voidmain(){
int*p;p=newint;//分配內(nèi)存空間*p=5;
cout<<*p;deletep;//釋放內(nèi)存空間
}【例2.3】new與delete應(yīng)用舉例。在用new分配內(nèi)存的同時(shí)進(jìn)行初始化。使用形式為:指針變量=new數(shù)據(jù)類型(初始值);例如上例中的:p=newint; *p=5;也可寫(xiě)成:p=newint(5);指針變量=new數(shù)據(jù)類型[數(shù)組大小];此時(shí)指針變量指向第一個(gè)數(shù)組元素的地址。使用new分配數(shù)組時(shí),不能提供初始值。使用new建立的數(shù)組變量也由delete釋放。其形式為:delete指針變量;或delete[]指針變量;4.用new建立數(shù)組類型的變量有時(shí)并不能保證一定可以從堆內(nèi)存中獲得所需空間,當(dāng)不能成功地分配到所需要的內(nèi)存時(shí),new返回0,即空指針。因此我們可以通過(guò)判斷new的返回值是否為0,來(lái)得知系統(tǒng)中是否有足夠的空閑內(nèi)存來(lái)供程序使用。例如:int*p=newint[100];if(p==0){cout<<"can’t,allocate,moreemory,terminating.”<<endl;exit(1);}其中exit函數(shù)的作用是終止程序運(yùn)行。#include<iostream>usingnamespacestd;voidmain(){intn;//定義數(shù)組元素的個(gè)數(shù)
int*p;
cout<<"pleaseinputthelengthofthearray:";
cin>>n;
p=newint[n];
【例2.4】從堆內(nèi)存中獲取一個(gè)整型數(shù)組,賦值后并打印出來(lái)。
if(p==0){cout<<"can'tallocatemorememory,terminating."<<endl;exit(1);}//分配內(nèi)存空間
for(inti=0;i<n;i++)p[i]=i*2;
cout<<"Nowoutputthearray:"<<endl;for(i=0;i<n;i++)
cout<<p[i]<<"";
cout<<endl;delete[]p;//釋放內(nèi)存空間}2.9作用域運(yùn)算符::
通常情況下,如果全局變量與局部變量同名,那么局部變量在其作用域內(nèi)具有較高的優(yōu)先權(quán)。
C語(yǔ)言規(guī)定只能在變量的作用域內(nèi)使用該變量,不能使用其他作用域中的變量。在C++中,提供了作用域運(yùn)算符::,它能指定所需要的作用域。
#include<iostream>usingnamespacestd;floata=2.4;//全局變量voidmain(){inta=8;//局部變量
cout<<a<<endl;
cout<<::a<<endl;//::a表示全局作用域中的變量a}2.10引用引用是C++語(yǔ)言的一個(gè)特殊數(shù)據(jù)類型描述,使用兩個(gè)以上的變量名指向同一地址,被聲明為引用類型的變量名則是實(shí)際變量名的別名。引用運(yùn)算符為&,聲明引用的一般形式為:數(shù)據(jù)類型&引用變量名=變量名;或數(shù)據(jù)類型&引用變量名=變量名;或數(shù)據(jù)類型&引用變量名=變量名;對(duì)引用進(jìn)行操作,實(shí)際上就是對(duì)被引用的變量進(jìn)行操作。引用不是值,不占存儲(chǔ)空間,【例2.5】引用舉例。#include<iostream.h>voidmain(){intnum=50; int&ref=num;
ref+=10;
cout<<"num="<<num<<endl;
cout<<"ref="<<ref<<endl;num+=40;
cout<<"num="<<num<<endl;
cout<<"ref="<<ref<<endl;}說(shuō)明:(1)在一行上聲明多個(gè)引用型變量(函數(shù))名時(shí),要在每個(gè)變量(函數(shù))名前都冠以“&”符號(hào)。(2)在程序中對(duì)引用的存取都是對(duì)它所引用的變量的存取。(3)一個(gè)變量被聲明為引用時(shí)必須進(jìn)行初始化,除非這個(gè)引用是用作函數(shù)的參數(shù)或返回值,為引用提供的初始值應(yīng)為變量(包括對(duì)象)。(4)引用一旦被初始化,就以對(duì)應(yīng)目標(biāo)的內(nèi)存單元地址作為自己的地址,并且不再改變。(5)引用與指針不同。指針的內(nèi)容或值是某一變量的內(nèi)存單元地址,指針是個(gè)變量,可以把它再賦值成其它的地址。(6)要注意區(qū)分引用運(yùn)算符和地址運(yùn)算符的區(qū)別。例如:intnum=50;int&ref=num;int*p=&ref;(7)可以用一個(gè)引用初始化另一個(gè)引用。例如:intnum=50;int&ref1=num;int&ref2=ref1;ref2=100; //num被修改為100其中ref2也是對(duì)num的引用。(8)可以把函數(shù)的參數(shù)說(shuō)明成引用,建立函數(shù)參數(shù)的引用傳遞方式?!纠?.8】數(shù)值交換舉例。2.11const修飾符#definePI3.1415926constfloatPI=3.1415926;這個(gè)常量是有類型的,它有地址,可以用指針指向這個(gè)值,但不能修改它。C++建議用const取代#define定義常量。
注意:
(1)使用const修飾符定義常量時(shí),必須初始化;
(2)常量一旦被定義,在程序中任何地方都不能再更改。
(3)如果用const定義的是一個(gè)整型常量,int可以省略。
(4)與#define定義的常量有所不同,const定義的常量可以有自己的數(shù)據(jù)類型,這樣C++編譯程序可以進(jìn)行更加嚴(yán)格的類型檢查,具有良好的編譯時(shí)的檢測(cè)性。
(5)函數(shù)參數(shù)也可以用const說(shuō)明,用于保證實(shí)參在該函數(shù)內(nèi)部不被改動(dòng)。例如,通過(guò)函數(shù)max求出整型數(shù)組a[100]中的最大值,函數(shù)原型應(yīng)該是:
intmax(constint*pa);
這樣做的目的是確保原數(shù)組的數(shù)據(jù)不被破壞,即在函數(shù)中對(duì)數(shù)組元素的操作只許讀,不許寫(xiě)。const與指針一起使用的組合情況:(1)指向常量的指針
指向常量的指針是指一個(gè)指向常量的指針變量。
constchar*pc="abcd";聲明指向常量的指針變量pc,它指向一個(gè)字符串常量;由于使用了const,不允許改變指針?biāo)傅某A?,因此以下語(yǔ)句是錯(cuò)誤的:pc[3]='x';但是可以改變pc的值。例如以下語(yǔ)句是允許的:pc="jkkk";const與指針一起使用的組合情況:(2)常指針常指針是指指針本身,而不是它指向的對(duì)象聲明為常量。例如:char*constpc="abcd";//常指針這個(gè)語(yǔ)句的含義為:聲明一個(gè)名為pc的指針變量,該指針是指向字符型數(shù)據(jù)的常指針,用“abcd”的地址初始化該常指針。創(chuàng)建一個(gè)常指針,就是創(chuàng)建不能移動(dòng)的固定指針,但是它所指的數(shù)據(jù)可以改變。例如:pc[3]='x';//合法pc="dfasdfa";//不合法const與指針一起使用的組合情況:(3)指向常量的常指針整個(gè)指針本身不能改變,它所指向的值也不能改變。要聲明一個(gè)指向常量的常指針,二者都要聲明為const。例如:constchar*constpc="abcd";//指向常量的常指針這個(gè)語(yǔ)句的含義為:聲明一個(gè)名為pc的指針變量,它是一個(gè)指向字符型常量的常指針,用“abcd”的地址初始化該指針。以下兩個(gè)語(yǔ)句都是錯(cuò)誤的:pc[3]='x';//錯(cuò)誤,不能改變指針?biāo)傅闹祊c="dfasdfa";//錯(cuò)誤,不能改變指針本身2.12字符串
在C語(yǔ)言中使用字符數(shù)組和字符指針實(shí)現(xiàn)字符串,但是在C++中提供了一種既方便又好用的string類型。下面通過(guò)一個(gè)簡(jiǎn)單的例子說(shuō)明string類型的使用?!纠?.10】字符串類string的使用。
#include<iostream>#include<string>//使用字符串類型的程序應(yīng)包含頭文件<string>usingnamespacestd;voidmain(){cout<<"請(qǐng)輸入一個(gè)字符串:"<<endl;strings,t;
cin>>s;或getline(cin,s);//由鍵盤(pán)輸入一行文本,并把它賦予sring類型的變量st="Ilikeprogramming!";
cout<<"字符串的輸出:"<<endl;
cout<<s<<endl<<t<<endl;}2.13C++語(yǔ)言中函數(shù)的新特性2.13.1
函數(shù)原型(FunctionPrototype)2.13.2
內(nèi)聯(lián)(inline)函數(shù)2.13.3
帶缺省參數(shù)的函數(shù)2.13.4
函數(shù)重載(overload)2.13.5
函數(shù)模板(functiontemplate)C++要求為每一個(gè)函數(shù)建立原型,用以說(shuō)明函數(shù)的名稱、參數(shù)個(gè)數(shù)及類型和函數(shù)返回值的類型。應(yīng)養(yǎng)成將聲明與定義分別編寫(xiě)的編程習(xí)慣。在寫(xiě)函數(shù)原型時(shí),可以省略形參的名字,但如果取名恰當(dāng),這些名字可以起到提示參數(shù)用途的作用。2.13.1函數(shù)原型(FunctionPrototype)2.13.2 內(nèi)聯(lián)(inline)函數(shù)在執(zhí)行程序過(guò)程中如果碰到函數(shù)調(diào)用,系統(tǒng)要進(jìn)行虛實(shí)結(jié)合,同時(shí)轉(zhuǎn)到函數(shù)的代碼處去執(zhí)行函數(shù)體語(yǔ)句,使得程序執(zhí)行效率降低。為了解決這個(gè)問(wèn)題,C++引入了內(nèi)聯(lián)函數(shù)機(jī)制。使用內(nèi)聯(lián)函數(shù)(用inline說(shuō)明)是一種用空間換時(shí)間的措施,通常只有較短的函數(shù)才定義為內(nèi)聯(lián)函數(shù),對(duì)于較長(zhǎng)的函數(shù)最好作為一般函數(shù)處理。【例2.11】?jī)?nèi)聯(lián)函數(shù)的使用。#include<iostream>usingnamespacestd;inlinedoublecircumference(doubleradius);voidmain(){doubler=3.0,s;s=circumference(r);
cout<<"thecircumferenceis"<<s<<endl;}inlinedoublecircumference(doubleradius)//內(nèi)聯(lián)函數(shù)的定義,此處也可以省略inline關(guān)鍵字{return2*3.1415926*radius;}2.13.3 帶默認(rèn)參數(shù)的函數(shù)如果在函數(shù)說(shuō)明或函數(shù)定義中為形參指定一個(gè)默認(rèn)值,則稱此函數(shù)為帶默認(rèn)參數(shù)的函數(shù)。如果函數(shù)有多個(gè)默認(rèn)參數(shù),則默認(rèn)參數(shù)必須是從右向左連續(xù)定義,并且在最右邊一個(gè)默認(rèn)參數(shù)的右邊不能有未指定默認(rèn)值的參數(shù)。voidfun(inta=3,intb=6,intc,intd);voidfun(inta=65,intb=3,intc,intd=3);需要特別注意的是如果在函數(shù)原型的聲明中設(shè)置了函數(shù)參數(shù)的默認(rèn)值,則不可再在函數(shù)定義的頭部重復(fù)設(shè)置,否則編譯時(shí)將出現(xiàn)錯(cuò)誤信息。2.13.4 函數(shù)重載(overload)C++編譯系統(tǒng)允許為兩個(gè)或兩個(gè)以上的函數(shù)取相同的函數(shù)名,但是形參的個(gè)數(shù)或者形參的類型不應(yīng)相同,編譯系統(tǒng)會(huì)根據(jù)實(shí)參和形參的類型及個(gè)數(shù)的最佳匹配,自動(dòng)確定調(diào)用哪一個(gè)函數(shù),這就是所謂的函數(shù)重載。【例2.12】重載函數(shù)應(yīng)用舉例【例2.12】重載函數(shù)應(yīng)用舉例#include<iostream.h>int
add(int
x,inty){intsum;sum=x+y;returnsum;}int
add(int
x,int
y,intz){intsum;sum=x+y+z;returnsum;}voidmain(){int
a,b;a=add(5,10);b=add(5,10,20);
cout<<”a=”<<a<<endl;
cout<<”b=”<<b<<endl;}在使用重載函數(shù)時(shí)要注意:①不可以定義兩個(gè)具有相同名稱、相同參數(shù)類型和相同參數(shù)個(gè)數(shù),只是函數(shù)返回值不同的函數(shù)。int
func(intx);floatfunc(intx);②如果某個(gè)函數(shù)參數(shù)有缺省值,必須保證其參數(shù)缺省后調(diào)用形式不與其它函數(shù)混淆。int
f(inta,floatb);voidf(inta,floatb,intc=0);函數(shù)調(diào)用語(yǔ)句:f(10,2.0);具有二義性,既可以調(diào)用第一個(gè)函數(shù),也可以調(diào)用第二個(gè)函數(shù)。2.13.5 函數(shù)模板(functiontemplate)
C++語(yǔ)言中可以使用模板來(lái)避免在程序中多次書(shū)寫(xiě)相同的代碼。所謂模板是一種使用無(wú)類型參數(shù)來(lái)產(chǎn)生一系列函數(shù)或類的機(jī)制。模板分為函數(shù)模板和類模板,函數(shù)模板可以定義一個(gè)對(duì)任何類型變量進(jìn)行操作的函數(shù)。使用的方法是先說(shuō)明函數(shù)模板,然后實(shí)例化成相應(yīng)的模板函數(shù)進(jìn)行調(diào)用執(zhí)行。1.函數(shù)模板函數(shù)模板的一般說(shuō)明形式如下:template<模板參數(shù)表><返回值類型><函數(shù)名>(形參表){//函數(shù)定義體}<模板參數(shù)表>尖括號(hào)中不能為空,參數(shù)可以有多個(gè),用逗號(hào)分開(kāi)。模板類型參數(shù)由關(guān)鍵字class或typename后加一個(gè)標(biāo)識(shí)符構(gòu)成,兩個(gè)關(guān)鍵字的意義相同,它們表示后面的參數(shù)名代表一個(gè)基本數(shù)據(jù)類型或用戶定義的類型。
如果類型形參多于一個(gè),則每個(gè)類型形參都要使用class或typename。如:template<classT>,則“T”可以在程序運(yùn)行時(shí)被任何C++語(yǔ)言支持的數(shù)據(jù)類型所取代。如有兩個(gè)以上的模板參數(shù)時(shí),使用逗號(hào)分隔,如:“template<classT1,classT2>”?!纠?.13】編寫(xiě)一個(gè)對(duì)具有n個(gè)元素的數(shù)組a[]求最小值的程序,將求最小值的函數(shù)設(shè)計(jì)成函數(shù)模板。#include<iostream.h>template<classT>Tmin(Ta[],intn)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 鋰電池回收拆解再生利用項(xiàng)目實(shí)施方案(模板范文)
- 跨境金融保障體系建設(shè)方案
- 吉林xx農(nóng)貿(mào)市場(chǎng)建設(shè)項(xiàng)目可行性研究報(bào)告
- 供水設(shè)施改造與升級(jí)規(guī)劃設(shè)計(jì)方案(范文)
- 供排水等地下管網(wǎng)建設(shè)改造項(xiàng)目可行性研究報(bào)告(范文參考)
- 公共廁所改造工程可行性研究報(bào)告
- 幼兒園教育教學(xué)
- 望遠(yuǎn)鏡產(chǎn)品設(shè)計(jì)核心要素與實(shí)現(xiàn)路徑
- 廣東省四會(huì)中學(xué)廣信中學(xué)2023-2024學(xué)年高二上學(xué)期第二次月考物理含解析
- 新疆師范大學(xué)《外國(guó)文學(xué)一》2023-2024學(xué)年第二學(xué)期期末試卷
- 圓錐破碎機(jī)設(shè)計(jì)畢業(yè)設(shè)計(jì)論文
- 消防內(nèi)資料全套附件
- 1.咨詢服務(wù)流程圖(通用)
- 學(xué)習(xí)“建設(shè)生態(tài)環(huán)境保護(hù)鐵軍的基本要求”心得體會(huì)1
- 梁若瑜著-十二宮六七二象書(shū)增注版
- 防洪堤初步設(shè)計(jì)報(bào)告
- 貴州機(jī)加工公司機(jī)加工項(xiàng)目安全預(yù)評(píng)價(jià)
- 汽輪機(jī)冷端優(yōu)化治理的幾種方法
- 最新結(jié)構(gòu)新舊混凝土結(jié)構(gòu)設(shè)計(jì)規(guī)范對(duì)比
- 旅游資源單體調(diào)查表樣表
- Hypermesh與Nastran模態(tài)分析詳細(xì)教程
評(píng)論
0/150
提交評(píng)論