版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第2章C++語言對C語言的擴充2.1C++的特點2.2C++語言的文件擴展名2.3注釋符2.4名字空間2.5C++語言的輸入輸出2.6變量的定義2.7強制類型轉換2.8動態(tài)內存的分配與釋放2.9作用域運算符::2.10引用2.11const修飾符2.12字符串2.13C++語言中函數(shù)的新特性習題2.1C++語言的特點
C++語言保留了C語言的有效性、靈活性、便于移植等特點,又添加了面向對象編程的支持。編寫出的程序具有結構清晰、易于擴充、程序可讀性好,生成的代碼質量高,運行效率僅比匯編語言慢10%~20%。2.2C++語言的文件擴展名
C++語言體系規(guī)定用“.cpp”作為C++語言源文件的擴展名以區(qū)別于C語言用的“.C”文件擴展名。
C語言用的頭文件(擴展名“.h”)在C++語言中仍然保留,標準C++語言的頭文件是沒有.h的
。2.3注釋符
1.段注釋:/*…*/2.單行注釋://當只做單行注釋時便可用“//”符號表示從此符號起至行尾均為行注釋內容。
3.程序編譯時將忽略所有的注釋內容。2.4名字空間(namespace)
C++語言中的名字空間是一種描述邏輯分組的機制。如果有一些聲明按照某種準則在邏輯上屬于同一個集團,就可以將它們放在同一個名字空間,并以關鍵字namespace開頭給它起一個名字:namespacens1{floata,b,c;fun1(){……}}標準C++庫中的所有組件都是在一個被稱為std的名字空間中聲明和定義的。使用標準C++庫中的組件,只要寫一個using指示符:
usingnamespacestd;
就可以直接使用標準C++庫中的所有成員。
注意:如果使用了名空間std,則在使用#include編譯預處理命令包含頭文件時,必須去掉頭文件的擴展名.h,否則會出錯。2.5C++語言的輸入輸出cout<<“輸出內容”<<…;
//cout為標準輸出流對象(默認輸出到顯示器)cin>>“輸入內容”>>…;
//cin為標準輸入流對象(默認從鍵盤輸入)#include<iostream.h>或#include<iostream>usingnamespacestd;【例2.1】C++的輸入輸出舉例。#include<iostream>//使用名空間std,則必須去掉.h擴展名usingnamespacestd;voidmain(){charname[10];
intage;
cout<<"pleaseinputyourname:";
cin>>name;
cout<<"Howoldareyou:";
cin>>age;
cout<<"nameis"<<name<<endl;
cout<<"ageis"<<age<<endl;}2.6變量的定義
C++在變量的定義上作了兩種較大的改變。一、允許變量的定義語句可以出現(xiàn)在程序的任何位置,增強程序的可讀性。二、允許直接使用結構體名定義變量。【例2.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強制類型轉換格式:(數(shù)據(jù)類型)(表達式)數(shù)據(jù)類型(表達式)通過強制類型轉換,得到一個所需類型的中間值。原來表達式的值類型并未改變。如下列代碼段:int
b;floatf;f=float(b);2.8動態(tài)內存的分配與釋放1.new運算符
指針變量=new數(shù)據(jù)類型;new從堆內存中為程序分配可以保存某種類型數(shù)據(jù)的一塊內存空間,并返回指向該內存的首地址,該地址存放于指針變量中。
2.delete運算符運算符delete用于釋放new分配的內存空間,它的使用形式為:delete指針變量;其中的指針變量保存著new動態(tài)分配的內存的首地址。3.注意:用new獲取的內存空間,必須用delete進行釋放;#include<iostream>usingnamespacestd;voidmain(){
int*p;p=newint;//分配內存空間*p=5;
cout<<*p;deletep;//釋放內存空間
}【例2.3】new與delete應用舉例。在用new分配內存的同時進行初始化。使用形式為:指針變量=new數(shù)據(jù)類型(初始值);例如上例中的:p=newint; *p=5;也可寫成:p=newint(5);指針變量=new數(shù)據(jù)類型[數(shù)組大小];此時指針變量指向第一個數(shù)組元素的地址。使用new分配數(shù)組時,不能提供初始值。使用new建立的數(shù)組變量也由delete釋放。其形式為:delete指針變量;或delete[]指針變量;4.用new建立數(shù)組類型的變量有時并不能保證一定可以從堆內存中獲得所需空間,當不能成功地分配到所需要的內存時,new返回0,即空指針。因此我們可以通過判斷new的返回值是否為0,來得知系統(tǒng)中是否有足夠的空閑內存來供程序使用。例如:int*p=newint[100];if(p==0){cout<<"can’t,allocate,moreemory,terminating.”<<endl;exit(1);}其中exit函數(shù)的作用是終止程序運行。#include<iostream>usingnamespacestd;voidmain(){intn;//定義數(shù)組元素的個數(shù)
int*p;
cout<<"pleaseinputthelengthofthearray:";
cin>>n;
p=newint[n];
【例2.4】從堆內存中獲取一個整型數(shù)組,賦值后并打印出來。
if(p==0){cout<<"can'tallocatemorememory,terminating."<<endl;exit(1);}//分配內存空間
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;//釋放內存空間}2.9作用域運算符::
通常情況下,如果全局變量與局部變量同名,那么局部變量在其作用域內具有較高的優(yōu)先權。
C語言規(guī)定只能在變量的作用域內使用該變量,不能使用其他作用域中的變量。在C++中,提供了作用域運算符::,它能指定所需要的作用域。
#include<iostream>usingnamespacestd;floata=2.4;//全局變量voidmain(){inta=8;//局部變量
cout<<a<<endl;
cout<<::a<<endl;//::a表示全局作用域中的變量a}2.10引用引用是C++語言的一個特殊數(shù)據(jù)類型描述,使用兩個以上的變量名指向同一地址,被聲明為引用類型的變量名則是實際變量名的別名。引用運算符為&,聲明引用的一般形式為:數(shù)據(jù)類型&引用變量名=變量名;或數(shù)據(jù)類型&引用變量名=變量名;或數(shù)據(jù)類型&引用變量名=變量名;對引用進行操作,實際上就是對被引用的變量進行操作。引用不是值,不占存儲空間,【例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;}說明:(1)在一行上聲明多個引用型變量(函數(shù))名時,要在每個變量(函數(shù))名前都冠以“&”符號。(2)在程序中對引用的存取都是對它所引用的變量的存取。(3)一個變量被聲明為引用時必須進行初始化,除非這個引用是用作函數(shù)的參數(shù)或返回值,為引用提供的初始值應為變量(包括對象)。(4)引用一旦被初始化,就以對應目標的內存單元地址作為自己的地址,并且不再改變。(5)引用與指針不同。指針的內容或值是某一變量的內存單元地址,指針是個變量,可以把它再賦值成其它的地址。(6)要注意區(qū)分引用運算符和地址運算符的區(qū)別。例如:intnum=50;int&ref=num;int*p=&ref;(7)可以用一個引用初始化另一個引用。例如:intnum=50;int&ref1=num;int&ref2=ref1;ref2=100; //num被修改為100其中ref2也是對num的引用。(8)可以把函數(shù)的參數(shù)說明成引用,建立函數(shù)參數(shù)的引用傳遞方式?!纠?.8】數(shù)值交換舉例。2.11const修飾符#definePI3.1415926constfloatPI=3.1415926;這個常量是有類型的,它有地址,可以用指針指向這個值,但不能修改它。C++建議用const取代#define定義常量。
注意:
(1)使用const修飾符定義常量時,必須初始化;
(2)常量一旦被定義,在程序中任何地方都不能再更改。
(3)如果用const定義的是一個整型常量,int可以省略。
(4)與#define定義的常量有所不同,const定義的常量可以有自己的數(shù)據(jù)類型,這樣C++編譯程序可以進行更加嚴格的類型檢查,具有良好的編譯時的檢測性。
(5)函數(shù)參數(shù)也可以用const說明,用于保證實參在該函數(shù)內部不被改動。例如,通過函數(shù)max求出整型數(shù)組a[100]中的最大值,函數(shù)原型應該是:
intmax(constint*pa);
這樣做的目的是確保原數(shù)組的數(shù)據(jù)不被破壞,即在函數(shù)中對數(shù)組元素的操作只許讀,不許寫。const與指針一起使用的組合情況:(1)指向常量的指針
指向常量的指針是指一個指向常量的指針變量。
constchar*pc="abcd";聲明指向常量的指針變量pc,它指向一個字符串常量;由于使用了const,不允許改變指針所指的常量,因此以下語句是錯誤的:pc[3]='x';但是可以改變pc的值。例如以下語句是允許的:pc="jkkk";const與指針一起使用的組合情況:(2)常指針常指針是指指針本身,而不是它指向的對象聲明為常量。例如:char*constpc="abcd";//常指針這個語句的含義為:聲明一個名為pc的指針變量,該指針是指向字符型數(shù)據(jù)的常指針,用“abcd”的地址初始化該常指針。創(chuàng)建一個常指針,就是創(chuàng)建不能移動的固定指針,但是它所指的數(shù)據(jù)可以改變。例如:pc[3]='x';//合法pc="dfasdfa";//不合法const與指針一起使用的組合情況:(3)指向常量的常指針整個指針本身不能改變,它所指向的值也不能改變。要聲明一個指向常量的常指針,二者都要聲明為const。例如:constchar*constpc="abcd";//指向常量的常指針這個語句的含義為:聲明一個名為pc的指針變量,它是一個指向字符型常量的常指針,用“abcd”的地址初始化該指針。以下兩個語句都是錯誤的:pc[3]='x';//錯誤,不能改變指針所指的值pc="dfasdfa";//錯誤,不能改變指針本身2.12字符串
在C語言中使用字符數(shù)組和字符指針實現(xiàn)字符串,但是在C++中提供了一種既方便又好用的string類型。下面通過一個簡單的例子說明string類型的使用。【例2.10】字符串類string的使用。
#include<iostream>#include<string>//使用字符串類型的程序應包含頭文件<string>usingnamespacestd;voidmain(){cout<<"請輸入一個字符串:"<<endl;strings,t;
cin>>s;或getline(cin,s);//由鍵盤輸入一行文本,并把它賦予sring類型的變量st="Ilikeprogramming!";
cout<<"字符串的輸出:"<<endl;
cout<<s<<endl<<t<<endl;}2.13C++語言中函數(shù)的新特性2.13.1
函數(shù)原型(FunctionPrototype)2.13.2
內聯(lián)(inline)函數(shù)2.13.3
帶缺省參數(shù)的函數(shù)2.13.4
函數(shù)重載(overload)2.13.5
函數(shù)模板(functiontemplate)C++要求為每一個函數(shù)建立原型,用以說明函數(shù)的名稱、參數(shù)個數(shù)及類型和函數(shù)返回值的類型。應養(yǎng)成將聲明與定義分別編寫的編程習慣。在寫函數(shù)原型時,可以省略形參的名字,但如果取名恰當,這些名字可以起到提示參數(shù)用途的作用。2.13.1函數(shù)原型(FunctionPrototype)2.13.2 內聯(lián)(inline)函數(shù)在執(zhí)行程序過程中如果碰到函數(shù)調用,系統(tǒng)要進行虛實結合,同時轉到函數(shù)的代碼處去執(zhí)行函數(shù)體語句,使得程序執(zhí)行效率降低。為了解決這個問題,C++引入了內聯(lián)函數(shù)機制。使用內聯(lián)函數(shù)(用inline說明)是一種用空間換時間的措施,通常只有較短的函數(shù)才定義為內聯(lián)函數(shù),對于較長的函數(shù)最好作為一般函數(shù)處理?!纠?.11】內聯(lián)函數(shù)的使用。#include<iostream>usingnamespacestd;inlinedoublecircumference(doubleradius);voidmain(){doubler=3.0,s;s=circumference(r);
cout<<"thecircumferenceis"<<s<<endl;}inlinedoublecircumference(doubleradius)//內聯(lián)函數(shù)的定義,此處也可以省略inline關鍵字{return2*3.1415926*radius;}2.13.3 帶默認參數(shù)的函數(shù)如果在函數(shù)說明或函數(shù)定義中為形參指定一個默認值,則稱此函數(shù)為帶默認參數(shù)的函數(shù)。如果函數(shù)有多個默認參數(shù),則默認參數(shù)必須是從右向左連續(xù)定義,并且在最右邊一個默認參數(shù)的右邊不能有未指定默認值的參數(shù)。voidfun(inta=3,intb=6,intc,intd);voidfun(inta=65,intb=3,intc,intd=3);需要特別注意的是如果在函數(shù)原型的聲明中設置了函數(shù)參數(shù)的默認值,則不可再在函數(shù)定義的頭部重復設置,否則編譯時將出現(xiàn)錯誤信息。2.13.4 函數(shù)重載(overload)C++編譯系統(tǒng)允許為兩個或兩個以上的函數(shù)取相同的函數(shù)名,但是形參的個數(shù)或者形參的類型不應相同,編譯系統(tǒng)會根據(jù)實參和形參的類型及個數(shù)的最佳匹配,自動確定調用哪一個函數(shù),這就是所謂的函數(shù)重載?!纠?.12】重載函數(shù)應用舉例【例2.12】重載函數(shù)應用舉例#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ù)類型和相同參數(shù)個數(shù),只是函數(shù)返回值不同的函數(shù)。int
func(intx);floatfunc(intx);②如果某個函數(shù)參數(shù)有缺省值,必須保證其參數(shù)缺省后調用形式不與其它函數(shù)混淆。int
f(inta,floatb);voidf(inta,floatb,intc=0);函數(shù)調用語句:f(10,2.0);具有二義性,既可以調用第一個函數(shù),也可以調用第二個函數(shù)。2.13.5 函數(shù)模板(functiontemplate)
C++語言中可以使用模板來避免在程序中多次書寫相同的代碼。所謂模板是一種使用無類型參數(shù)來產(chǎn)生一系列函數(shù)或類的機制。模板分為函數(shù)模板和類模板,函數(shù)模板可以定義一個對任何類型變量進行操作的函數(shù)。使用的方法是先說明函數(shù)模板,然后實例化成相應的模板函數(shù)進行調用執(zhí)行。1.函數(shù)模板函數(shù)模板的一般說明形式如下:template<模板參數(shù)表><返回值類型><函數(shù)名>(形參表){//函數(shù)定義體}<模板參數(shù)表>尖括號中不能為空,參數(shù)可以有多個,用逗號分開。模板類型參數(shù)由關鍵字class或typename后加一個標識符構成,兩個關鍵字的意義相同,它們表示后面的參數(shù)名代表一個基本數(shù)據(jù)類型或用戶定義的類型。
如果類型形參多于一個,則每個類型形參都要使用class或typename。如:template<classT>,則“T”可以在程序運行時被任何C++語言支持的數(shù)據(jù)類型所取代。如有兩個以上的模板參數(shù)時,使用逗號分隔,如:“template<classT1,classT2>”?!纠?.13】編寫一個對具有n個元素的數(shù)組a[]求最小值的程序,將求最小值的函數(shù)設計成函數(shù)模板。#include<iostream.h>template<classT>Tmin(Ta[],intn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度旅游貸款擔保委托服務合同書3篇
- 在科技創(chuàng)新背景下探索小培養(yǎng)學生的邏輯思維能力
- 2024年月子中心高端月子中心入住及專業(yè)護理服務合同3篇
- 2025中國聯(lián)通江西分公司春季校園招聘152人高頻重點提升(共500題)附帶答案詳解
- 2025中國移動通信集團設計院限公司春季校園招聘高頻重點提升(共500題)附帶答案詳解
- 2025中國石油集團石油管工程技術研究院高校畢業(yè)生招聘14人高頻重點提升(共500題)附帶答案詳解
- 2025中國建筑土木建設限公司招聘443人高頻重點提升(共500題)附帶答案詳解
- 2025中交集團暨中國交建總部員工招聘1人高頻重點提升(共500題)附帶答案詳解
- 2025下半年重慶榮昌區(qū)事業(yè)單位歷年高頻重點提升(共500題)附帶答案詳解
- 2025下半年浙江舟山市屬事業(yè)單位招聘34人歷年高頻重點提升(共500題)附帶答案詳解
- SJG 74-2020 深圳市安裝工程消耗量定額-高清現(xiàn)行
- 新媒體運營期末復習試題及答案
- 在全市高技能人才隊伍建設工作會議上的講話
- 最新開利中央空調故障代碼大全
- 列車牽規(guī)正文
- 中小學優(yōu)秀備課組(教研組)評比考核表(分值已調整)
- 時產(chǎn)10噸配合飼料廠工藝設計
- 擋風玻璃自動涂膠方案
- 四層電梯控制系統(tǒng)設計-(共38頁)
- 資產(chǎn)損失鑒證報告(范本)
- 配電房施工方案及技術措施
評論
0/150
提交評論