




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1,第1章 C+對C性能的擴充,面向?qū)ο蟪绦蛟O(shè)計與C+,2,1 行注釋 2 輸入輸出 3 數(shù)據(jù)類型 4 變量,主要內(nèi)容,5 函數(shù) 6 new及delete 7 引用類型,3,1. 行注釋,在C+中,新增了行注釋/ /sum.cpp #include /編譯預(yù)處理命令 using namespace std; /使用命令空間std int main() /主函數(shù)首部 int x,y,sum; /定義3個整型變量 coutx; /從鍵盤輸入變量x的值 ciny; /從鍵盤輸入變量y的值 sum=x+y; /將x+y的值賦給整型變量sum coutx+y=sumendl; /輸出兩個整數(shù)的和sum
2、return 0; /如程序正常結(jié)束, /向操作系統(tǒng)返回一個數(shù)值0 ,4,C語言中我們用庫函數(shù)printf和scanf對基本變量進行輸入輸出。如下程序:,2. 數(shù)據(jù)的輸入和輸出,#include void main() int a; scanf(%d, ,C+擴展了C的輸入輸出,不但可用printf、scanf函數(shù),還可以用輸入輸出流。,5,C+輸入輸出標準流,以上標準流為利用面向?qū)ο蠓椒ㄔO(shè)計的輸入輸出流類的對象.,使用cin的格式:cin變量名1變量名2變量名n,使用cout的格式:cout,6,#include int main() for(int i=1;iafc; couta=af=f
3、c=cendl; return 0; ,例如:,注:使用cin與cout必須在程序開頭包含iostream頭文件!,7,C+輸入輸出流的優(yōu)點,簡單易用,根據(jù)操作對象自適應(yīng),無需指定變量的類型; 可對自定義的類型進行輸入輸出; 提高了安全性和可擴展性。,8,3. 數(shù)據(jù)類型,枚舉類型 一般形式:enum 枚舉類型名枚舉列枚舉變量表 C+中定義枚舉變量時,不必在枚舉名前加標識符enum 共用體類型 同結(jié)構(gòu)體類型,聯(lián)合類型一旦定義,就可以直接使用聯(lián)合名定義變量,而不用在聯(lián)合體名前加標識符union。 結(jié)構(gòu)體類型: C+語言,結(jié)構(gòu)體一旦定義,則可以直接使用該結(jié)構(gòu)體名定義變量,不需在結(jié)構(gòu)體前加struct
4、標識。如: struct studentxxx; student stu; 另外,C+中的結(jié)構(gòu)體類型所有的屬性和方法都是公有的。 新增類類型 C+中的struct作為特殊的類類型中不僅有屬性數(shù)據(jù)還有成員函數(shù),但是所有訪問屬性都是公有。,9,C語言中我們都是用字符數(shù)組來表示字符串的,在C+除了可以用字符數(shù)組表示外,我們還可以用string類型來更方便的表示字符串,string實質(zhì)上是C+標準庫(stl)中用面向?qū)ο蠓椒ǘx的字符串類,它并不是C+提供的基本類型。,#include #include /必須包含此頭文件 using namespace std; void main() string
5、 str1; str1=abcdefg; string str2=str1; /用一個字符串給另一個賦值 coutstr1endl; /對字符串進行輸入輸出 coutstr15endl; /操作字符串中的單個字符 str15=k; coutstr1endl; ,string類型,10,string字符串的運算,C語言中對字符串進行運算要用到strcat(),strcpy(),strcmp()等庫函數(shù),C+中的string字符串類,可以直接用+,=等運算符對字符串進行操作。,#include #include /必須包含此頭文件 using namespace std; void main()
6、string str1=abcd; string str2=efgh; coutstr1+str2endl; /字符串連接 /字符串比較 if(str1str2) coutstr1小于str2endl; else coutstr1大于等于str2endl; ,11,4. 變量,正確理解C中的變量的定義要求:一般應(yīng)該集中定義出,不能在語句塊中定義。 程序例:void main() int x=1; /正確 for(int i=0; i10; i+) /錯誤 int y=2; ,12,(1)C+變量定義規(guī)則,可以采用“隨用隨定義”的方式定義出變量,即變量的塊內(nèi)定義 C+中允許變量在使用之前的任一語
7、句塊中定義出來,包括 for循環(huán)中,何為塊?,塊:C+語言把括起來的一塊區(qū)域稱為塊。,塊變量:定義在某個塊中的變量。,塊作用域:變量定義的由花括號括起來的范圍,塊變量在其 作用域可見,而在作用域外不可見。,13,例如:,#include void main(void) int x=1;/局部變量 int y; /塊內(nèi)變量 x=3;y=4; couty=yendl; ,void main(void) for(int i=1;i10;i+) int z=1; /塊內(nèi)變量 coutz=z; ,14,正確理解C+中的變量的各種作用域,文件域全局變量(其作用域為從定義點到當(dāng)前文件結(jié)束有效)。 函數(shù)域局部
8、變量(其作用域為本函數(shù)內(nèi)有效)。 函數(shù)原型域函數(shù)的形參,為局部變量,只在該函數(shù)體內(nèi)有效。 塊內(nèi)域塊內(nèi)定義的變量(比局部變量的作用域更小),塊內(nèi)定義的變量的作用域為從定義點到當(dāng)前塊內(nèi)有效,語句塊執(zhí)行完畢,自動釋放。,15,例如:,int X=1; void Function(int a) int b=a; X=b; Y=X; void main() int Y=2; X=2; Function(X); for(int i=0;i10;i+) X=2; int C=0; X=2,Y=3; C=X; a=3; b=4; ,/錯誤,/正確,/正確,/正確,/正確,/錯誤,/全局變量 /函數(shù)的形參 /局
9、部變量 /局部變量 /塊定義的變量 /塊定義的變量,16,語句塊內(nèi)變量的應(yīng)用目的,通過縮小變量的作用域來縮短變量的生存期,充分利用內(nèi)存空間,優(yōu)化內(nèi)存的使用,void main() int X; /局部變量 for(X=1; X10; X+) /在此時X才被釋放,void main() for(int X=1; X10; X+) /塊內(nèi)變量 /在此時X就被釋放 ,17,(2) 作用域運算符與命名空間,C語言中變量命名的要求: 在同一個程序中應(yīng)該盡可能保持變量名的唯一性,最好不要同名。,#include iostream.h int X=1; void main() int X=2; cout X
10、; ,相同嗎?,此時輸出的X值是為“1”還是“2”,系統(tǒng)采用同名覆蓋原則決定,輸出為2 如果要輸出全局變量X的值,怎么辦?,18,C+中的全局作用域限定符,作用:它能使程序員訪問在某外部塊中所定義的全局變量,以免被同名的局部變量所覆蓋。 訪問規(guī)則:有:限定的同名符號是全局變量,無:限定的同名符號是局部變量。,#include int X=1; void main() int X=2; cout local X= Xendl; /未限定時的符號名為局部 /符號名 cout global X= :X; /采用“:”限定時的符號名為全/局符號名 ,19,全局作用域限定符的編程規(guī)則(1),只能將“:”
11、放在具有全局符號名說明的變量名之前,不能放在無全局符號名說明的局部變量名之前。 int X=1; void main(void) int X=2; int Y=3; :X=10;/正確,因為有同名的全局符號名說明 :Y=4;/錯誤,因為無同名的全局符號名說明 全局作用域限定符“:”不僅可以限定變量,也可以用來限定函數(shù),20,名字空間,-解決不同模塊相同名字沖突問題。 一個名字空間可以看作一個比程序模塊更大的包。 格式:Namespace ModuleName ,注:一個給定名字空間的所有代碼可以位于同一個文件中, 也可以分布在多個文件中,但是在每一個文件中代碼都要按照 上述語句格式進行封裝。
12、其作用域有兩方面的含義: (1)同一個名字空間作用域內(nèi)不允許存在同名標識符; (2)不同名字空間作用域內(nèi)的標識符不能直接調(diào)用,需要 添加名字空間的作用域限定運算符。,21,例如:,/a.h #include namespace A 函數(shù)f1 函數(shù)f2 變量s; ,若要在A名字空間外,調(diào)用f1、f2函數(shù)和 變量s,如何表達?,方法1:A:f1();,方法2:#include “A.h” void main() using namespace A; f1();/名字空間A中的函數(shù) ,22,(3)用const關(guān)鍵字定義常變量,在C語言中我們用#define宏命令來定義常量,define只是在編譯時進
13、行字符串替換,運行時系統(tǒng)不為其分配內(nèi)存空間。用它有時會出現(xiàn)意想不到的錯誤。如下所示:,#include #define PI 3 #define R a+b int main() int a=2; int b=3; coutPI*R*R; return 1; ,程序輸出15而不是想要的75的結(jié)構(gòu)。,因為PI*R*R被展開為了3*a+b*a+b=15。,因此C+提供了const關(guān)鍵字來定義常變量,用const定義的常變量具有變量量的一些屬性。(有數(shù)據(jù)類型、占用內(nèi)存空間、具有地址、可以用指針來指向它等),唯一和變量不同的是它的值只能在定義時指定。以后就不能通過任何形式改變。,23,#include
14、 #define PI 3 /沒有類型,不占用存儲單元 const int R=2+3;/有類型,有存儲單元 int main() int a=2; int b=3; coutPI*R*Rendl; return 1; ,改進:,24,#include const float PI=3.1415926f; int main() float r; coutr; while(r=0) coutr; return 1; ,例:分析如下程序的功能,25,const定義常量,const 類型 常量名=表達式; 或 類型 const 常量名=表達式;,例如:const double pi=3.14; 和
15、double const pi=3.14;兩者等價!,const定義數(shù)組常量:const int a5=1,2,3,4,5;,注:const定義常量必須初始化。,26,常量與指針一起使用,(1)指向常量的指針,const char * name=chen;,name2=i;? name=stu;?,(2)常指針,char* const name=chen,例如:name=stu; name1=2;,27,常量與指針一起使用,(3)指向常量的常指針,注:const定義一個整型常量,關(guān)鍵字int可以省略。,const char *const name=”chen”;,name2=i;? name=
16、”stu”;?,28,區(qū)分C語言中的#define與C+中的const的不同,由#define所定義的符號名為全局性常量,因而在整個程序中應(yīng)保持符號名的唯一性; const可以說明一個局部或全局性同名常量(據(jù)此可以改變const符號名之值)。 另外在語法方面,#define為編譯預(yù)處理命令,而const為定義符,語句以“;”結(jié)束。 #define Min 1 const int Max=100; void main(void) #define Min 2 /錯誤,不能再定義同名常量 const int Max=200; /可以再定義同名局部常量 ,29,(4)函數(shù)形式上的轉(zhuǎn)換,任何系統(tǒng)定義的基
17、本數(shù)據(jù)類型或用戶自定義的數(shù)據(jù)類型的名字, 都可作為函數(shù)使用,從而把變量(常量)從一種數(shù)據(jù)類型轉(zhuǎn)換 到另一種數(shù)據(jù)類型。 例如:int i=20; float x; x=int(i);,(在C語言中則錯誤),30,C語言要求如果函數(shù)調(diào)用在函數(shù)定義之前,則應(yīng)在函數(shù)調(diào)用之前對所調(diào)用的函數(shù)進行函數(shù)聲明,但如果函數(shù)的返回值為整型,也可以不進行聲明。如下例所示:,#include int max(int a,int b); /函數(shù)聲明 void main() int a=max(2,3); printf(%d,a); int max(int a,int b) if(a=b) return a; else r
18、eturn b; ,int max(int a,int b);就是對后面max函數(shù)的聲明。由于max函數(shù)的返回值為整型,所以這里的聲明也可以不要。但如果max的返回值不是整型,這必須對其進行聲明。 聲明可以采用以下幾種形式: int max(int a , int b); /原型聲明 int max(); / 無參聲明 max(); /無參無返回值聲明,5.函數(shù),31,(1)C+中的函數(shù)聲明,在C+如果函數(shù)調(diào)用在函數(shù)定義之前。則必須在調(diào)用之前對其進行的函數(shù)聲明(返回值為int的函數(shù)也必須聲明)。而且必須采用函數(shù)原型聲明的形式。,#include int max(int a,int b); in
19、t main() int a=max(2,3); cout=b) return a; else return b; ,C+中函數(shù)聲明必須采用函數(shù)原型的形式: 返回值 函數(shù)名(形參表); 但在C+中函數(shù)的聲明可以只有形參類型,而沒有形參。如左邊的例子中也可將函數(shù)申明寫為: int max(int int);,要區(qū)分函數(shù)的定義、聲明和調(diào)用以及它們的作用。,32,(2) C+中函數(shù)的重載,函數(shù)重載:C+中允許在同一作用域中用同一函數(shù)名定義多個函數(shù)(C語言中不可以) 。這些函數(shù)的參數(shù)個數(shù)和參數(shù)類型不同。,例1:跟據(jù)參數(shù)類型的不同進行重載,33,例2:跟據(jù)參數(shù)個數(shù)的不同進行重載,由以上兩個例子的分析可以
20、得出:對重載的函數(shù)進行調(diào)用時,主要根據(jù)函數(shù)參數(shù)類型和個數(shù)的不同來確定具體應(yīng)該調(diào)用那一個函數(shù)。,重載的函數(shù)能否僅僅只有返回值不同而形參完全相同?,調(diào)用重載函數(shù)時,函數(shù)返回值類型不在參數(shù)匹配檢查之列,34,(3)默認參數(shù)的函數(shù),C語言,函數(shù)調(diào)用時傳給函數(shù)的實參個數(shù)必須與形參的個數(shù)相同,但C+可以讓形參帶有默認的值,從而可以讓傳遞給函數(shù)的形參個數(shù)少于實參的個數(shù)。稱為默認參數(shù)。這種機制有時候給我們帶來很大的方便。尤其是在面向?qū)ο缶幊虝r類的構(gòu)造函數(shù)。,#include void GetDate(int day ,int month=3,int year=2011) coutyear/month/daye
21、ndl; int main( ) GetDate(20); GetDate(20,5); GetDate(20,5,2012); return 1; ,程序輸出: 2011/3/20 2011/5/20 2012/5/20,35,實參與形參的結(jié)合是以從左到右的順序進行的,第一個實參的值必須傳遞給第一個形參,第二個實參必然與第二個形參相結(jié)合。所以帶函數(shù)的默認參數(shù)必須按從右到左的順序進行默認。例如如下的函數(shù)默認參數(shù)是錯誤的。 Fun(int a, int b=2,int c,int d=3); /錯誤,默認參數(shù)的次序,由以上的討論我們可以發(fā)現(xiàn),在有默認參數(shù)的函數(shù)中,實參的個數(shù)可以少于形參的個數(shù),但
22、實參的個數(shù)不能少于形參中沒有默認的參數(shù)的個數(shù)。,帶默認值的函數(shù)的功能可以由函數(shù)的重載來實現(xiàn)!,36,使用帶默認參數(shù)的函數(shù)時應(yīng)注意的問題,(1)如果函數(shù)的定義在函數(shù)的調(diào)用之前,則應(yīng)在函數(shù)的定義中給出形參的默認值。如果函數(shù)的定義在函數(shù)的調(diào)用之后,則應(yīng)在函數(shù)聲明中給出參數(shù)的默認值,而在函數(shù)的定義中可以給出也可以不給出(視編譯器而定,例如VC6.0中則只能在函數(shù)聲明中給出,而在函數(shù)定義中不能給出默認參數(shù))。為了避免混淆,我們最好只在函數(shù)聲明中給出默認參數(shù)。,(2)函數(shù)名重載時最好不要用缺省參數(shù),否則會引起二義性 。例如: GetDate(int day,int month=4,int year=200
23、8); GetDate(int day); 則如果有一個函數(shù)調(diào)用GetDate(20),系統(tǒng)無法判斷應(yīng)該調(diào)用哪一個函數(shù)(編譯報錯)。但如果第二個函數(shù)改為: GetDate(int dat,int month,int year,int hour); 則不會出現(xiàn)以上混淆。,37,(4)內(nèi)聯(lián)函數(shù)(內(nèi)置函數(shù)),對函數(shù)的調(diào)用需要一定的時間和空間開銷,對于有些需要頻繁調(diào)用的函數(shù)這種開銷會累積起來。C+對此提供了一種解決方法內(nèi)聯(lián)函數(shù)。,內(nèi)聯(lián)函數(shù):在編譯時將被調(diào)函數(shù)的代碼嵌入到主調(diào)函數(shù)中。這種嵌入到主調(diào)函數(shù)中的函數(shù)稱為內(nèi)聯(lián)函數(shù)。定義內(nèi)聯(lián)函數(shù)只需在函數(shù)定義的前面加上關(guān)鍵字 inline.,#include us
24、ing namespace std; inline int max(int a,int b); void main() int a=max(2,3); cout=b) return a; else return b; ,38,使用內(nèi)聯(lián)函數(shù)應(yīng)注意:,內(nèi)聯(lián)函數(shù)必須在函數(shù)第一次出現(xiàn)時由inline指定; 內(nèi)聯(lián)函數(shù)代碼不宜太大,原則上適宜1-5行代碼的小函數(shù); 不能含有復(fù)雜的分支和循環(huán)等語句。 遞歸調(diào)用函數(shù)不能定義為內(nèi)聯(lián)函數(shù)。,39,/分配一個堆區(qū)動態(tài)數(shù)組 int *p; int i; void f() cini; p=(int *)malloc(sizeof(int)*i); void main()
25、 f(); for(int j=0;ji;j+) pj=j*10; coutpjendl; free(p); ,6.動態(tài)分配/撤銷內(nèi)存的運算符new和delete,C語言中動態(tài)內(nèi)存的分配與使用(堆區(qū)),/分配單個堆區(qū)變量 #include #include void main() int *p; p=(int*)malloc(sizeof(int); *p=4; cout*pendl; free(p); ,40,動態(tài)分配/撤銷內(nèi)存的運算符new和delete,C語言中使用庫函數(shù)malloc和free,進行內(nèi)存分配和撤銷,malloc只能由用戶給出大小來分配內(nèi)存而不能自己確定數(shù)據(jù)類型,所以不適合
26、面向?qū)ο笞远x類型,C+提供了new和delete運算符來對內(nèi)存進行動態(tài)分配和撤銷(任兼容C語言的malloc和free函數(shù))。,new和delete的用法:,#include using namespace std; void main() int *p; p=new int; *p=4; cout*pendl; delete p; ,int *p; int i; void f() cini; p=new inti; void main() f(); for(int j=0;ji;j+) pj=j*10; coutpjendl; deletep; ,41,7. 引用類型,引用:就是給變量起一
27、個別名,別名的定義,同一實體,兩個不同的名稱。 C+中的引用:同一內(nèi)存單元兩種不同的變量名。,通過引用,可以實現(xiàn)在不同的作用域內(nèi)訪問同一內(nèi)存單元。,42,void main() int x=1; fun(x); void fun(int ,您知道x與a是什么關(guān)系嗎?,43,引用定義的語法,類型定義符 即ra與a為同一個變量,但在不同的應(yīng)用場合下(作用域內(nèi))以不同的變量名出現(xiàn)。,44,必須定義的同時使之初始化。引用并不另開辟內(nèi)存空間。 聲明了一個變量的引用后,就不能在將其改為別的變量的引用。如下程序。,注意!,#include using namespace std; int main() in
28、t a=2,b=3; int ,聲明 對一個一般變量的引用,45,引用實際上是一隱指針,是對變量的間接引用,但不必加運算符“*“。 引用不同于其他變量。 不能定義引用數(shù)組;如: int ?,46,為什么要提供引用操作符,C+中的引用主要是用來解決函數(shù)調(diào)用中形參為指針型的參數(shù)時其函數(shù)體時的不安全性(易出錯),使得操作更加簡單、安全。 例如:,47,48,引用調(diào)用的優(yōu)點,通過引用調(diào)用可以提高調(diào)用速度,因為只需要傳送地址而不需要直接將大量數(shù)據(jù)拷貝,因而特別適用于形參為大量數(shù)據(jù)的應(yīng)用場合。,struct Data int a1000; AData; void fun(struct Data X) ,s
29、truct Data int a1000; AData; void fun(struct Data 可見swap函數(shù)并不能實現(xiàn)將實參交換的作用。,51,(2)變量地址作實參 變量地址作實參是將函數(shù)的參數(shù)定義為指針類型,調(diào)用函數(shù)的時候?qū)⒆兞康牡刂纷鳛閷崊鬟f給函數(shù)。這種傳值方式也是單向傳遞,但和變量名作實參不同的是它將實參變量的內(nèi)存地址復(fù)制給形參。所以可以在函數(shù)棧中直接通過變量地址來改變實參的值。,52,#include using namespace std; void swap(int *a,int *b); int main() int a=2,b=4; swap( ,void swap(int *pa,int *b) int temp=*pa; *pa=*pb; *pb=temp; ,程序輸出:a=4 b=2; 可見swap函數(shù)實現(xiàn)了將實參交換的作用。間接的實現(xiàn)了函數(shù)傳參的雙向傳遞。,53,()變量引用作實參 變量引用作實參是將函數(shù)的參數(shù)定義為引用類型,調(diào)用函數(shù)的時候?qū)⒆兞棵鳛閷崊鬟f給函數(shù)。這種傳值方式是雙向傳遞,實參和形參共享同一內(nèi)存空間。改變了形參也就改變了實參。,54,#include usin
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年河南推拿職業(yè)學(xué)院單招職業(yè)技能測試題庫新版
- 2025年湖北省宜昌市單招職業(yè)傾向性測試題庫一套
- 2025年湖南交通職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性測試題庫完整
- 2025年河南工業(yè)職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫含答案
- 2025年廣東省外語藝術(shù)職業(yè)學(xué)院單招職業(yè)傾向性測試題庫必考題
- 2025年黑龍江冰雪體育職業(yè)學(xué)院單招職業(yè)技能測試題庫審定版
- 2025年湖北藝術(shù)職業(yè)學(xué)院單招職業(yè)傾向性測試題庫帶答案
- 2025年河南經(jīng)貿(mào)職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫帶答案
- 2025年湖北職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫匯編
- 2025年廣西城市職業(yè)大學(xué)單招職業(yè)技能測試題庫參考答案
- 數(shù)字孿生與光伏儲能集成
- 2025屆高考語文復(fù)習(xí):補寫語句+課件
- Siemens WinCC:WinCC趨勢圖與歷史數(shù)據(jù)技術(shù)教程.Tex.header
- 保護和傳承中國傳統(tǒng)文化遺產(chǎn)閱讀題答案
- 人教版生物八年級下冊全冊教學(xué)課件
- 四川省高職單招汽車類《汽車文化》復(fù)習(xí)備考試題庫(濃縮500題)
- 養(yǎng)牛購料購銷合同范本
- 衛(wèi)生健康大數(shù)據(jù)底座建設(shè)需求
- 勞動合同范本1997
- MSA五性分析全套樣板(千分尺)
- 《網(wǎng)絡(luò)安全防護項目教程》課件第3篇 管理篇
評論
0/150
提交評論