版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
C++面向?qū)ο蟛糠窒蛳录嫒輈部分--------混合式編程語言C++:編譯后執(zhí)行效率高,僅比匯編低10%Vc++:微軟操作系統(tǒng)平臺優(yōu)勢二C++對C語言的擴充C語言書寫程序回顧://hello,theworld程序#include<stdio.h>intmain(){printf(“%s”,“hello,theworld!”);return0;}C++helloworld程序://hello,theworld程序#include<iostream>usingnamespacestd;intmain(){
cout<<“hello,theworld!”;return0;}主要內(nèi)容1C++保留字2C++命名空間3C++語言的輸入輸出4動態(tài)內(nèi)存的分配與釋放5引用6C++函數(shù)新種類1C++保留字C++向下兼容原c語言,因此采用C語言寫的程序代碼,在C++環(huán)境下仍能編譯運行。
為提高開發(fā)效率,C++對C語言進行了擴充,重點加入了面向?qū)ο笳Z言成分。ANSIC的32個保留字auto:用于聲明變量的生存期為自動,即將不在任何類、結(jié)構(gòu)、枚舉、聯(lián)合和函數(shù)中定義的變量視為全局變量,而在函數(shù)中定義的變量視為局部變量。這個關(guān)鍵字不怎么多寫,因為所有的變量默認就是auto的。
register:這個關(guān)鍵字命令編譯器盡可能的將變量存在CPU內(nèi)部寄存器中而不是通過內(nèi)存尋址訪問以提高效率。registerinta=10;moveAX,10;inta=10;moveDS:[100],10;extern:它的作用在于告訴編譯器:有這個變量,它可能不存在當(dāng)前的文件中,但它肯定要存在于工程中的某一個源文件中或者一個Dll的輸出中。Static:靜態(tài)變量,放在程序的全局存儲區(qū)中,這樣可以在下一次調(diào)用的時候還可以保持原來的賦值。與堆棧變量和堆變量區(qū)分。變量用static告知編譯器,自己僅僅在變量的作用范圍內(nèi)可見。這一點是它與全局變量的區(qū)別。volatile:表明某個變量的值可能在外部被改變,優(yōu)化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器里的備份。它可以適用于基礎(chǔ)類型如:int,char,long......也適用于C的結(jié)構(gòu)和C++的類。當(dāng)對結(jié)構(gòu)或者類對象使用volatile修飾的時候,結(jié)構(gòu)或者類的所有成員都會被視為volatile.該關(guān)鍵字在多線程環(huán)境下經(jīng)常使用,因為在編寫多線程的程序時,同一個變量可能被多個線程修改,而程序通過該變量同步各個線程;ANSIC++的29個擴充保留字名字空間(namespace)namespacens1{floata,b,c;fun1(){……}}floata,b,c;a=ns1::a;ns1的作用域,作用域內(nèi)定義的變量,對象,函數(shù),可以直接使用.作用域外使用域內(nèi)的名字,則需加上域操作符::可以在同一文件內(nèi)使用多個同名變量,函數(shù)等同名對象,去除“同名沖突”。如兩程序員寫各自模塊時,都自定義了一個同名函數(shù),一旦同時包含,則沖突。a.hintx;intfun(inta,intb);b.hintx;intfun(inta,intb);#include<a.h>#include<b.h>x=10;intc=fun(2,3);a.hnamespaceA{intx;intfun(inta,intb);}b.hnamespaceB{intx;intfun(inta,intb);}#include<a.h>#include<b.h>usingnamespaceA;x=10;intc=B::fun(2,3);名字空間(namespace)namespacens1
{namespacens2{floata,b,c;fun1(){……}}floata,b,c;a=ns2::a;}floata;a=ns1::ns2::a;名字空間支持多重嵌套名字空間(namespace)usingn1::n2::a;//直接使用具體名字floatb;b=a;
usingnamespacen1::n2;floatb;b=a;名字空間簡化用法名字空間(namespace)
確定變量/函數(shù)/對象所屬作用域,即確定當(dāng)前使用的有多個同名的變量/函數(shù)/對象到底是哪個。floata=2.4;//全局變量voidmain(){inta=8;//局部變量cout<<a<<endl;cout<<::a<<endl;//::a表示全局作用域中的變量a}作用域運算符(::)名字空間(namespace)標準C++庫中的所有組件都是在一個被稱為std的名字空間中聲明和定義的。在采用標準C++的平臺上使用標準C++庫中的組件,只要寫一個using指示符:
usingnamespacestd;就可以直接使用標準C++庫中的所有成員。注意:如果使用了名空間std,則在使用#include編譯預(yù)處理命令包含頭文件時,必須去掉頭文件的擴展名.h,否則會出錯。namespacestd
3C++語言的輸入輸出C++采用新的I/O流來取代C中的scantf/printfI/O函數(shù)?;靖袷饺缦拢?include<iostream.h>
cout<<“輸出內(nèi)容”<<…;//cout為標準輸出流對象(默認輸出到顯示器)
cin>>“輸入內(nèi)容”>>…;//cin為標準輸入流對象(默認從鍵盤輸入)3C++語言的輸入輸出示例2.1:voidmain(){charname[10];intage;cout<<"pleaseinputyourname:";cin>>name;cout<<"Howoldareyou:";cin>>age;cout<<"nameis"<<name<<endl;cout<<"ageis"<<age<<endl;}使用cout/cin的好處在哪?C++變量定義:1、任意處均可定義變量(注意:仍限定先定義后使用),可讀性增強;而c語言不允許代碼與定義相混。2、復(fù)合變量定義可直接用復(fù)合類型名定義:structmana;unioncolorb;classcarc;mana;colorb;carc;C++強制類型轉(zhuǎn)換:格式改為:轉(zhuǎn)換類型名(表達式)inta=int(2.5/4);inta=(int)(b);強制類型轉(zhuǎn)換具有臨時性(原類型并未改變)強制類型轉(zhuǎn)換高優(yōu)先級(先轉(zhuǎn)換后參與其他運算)
4動態(tài)內(nèi)存的分配與釋放C++采用算符new/delete取代c中的malloc/free函數(shù)來實現(xiàn)動態(tài)內(nèi)存的分配與釋放。a.new運算符int*a=(int*)malloc(sizeofint);int*a=newint;//new的使用new從堆內(nèi)存中為程序分配可以保存某種類型數(shù)據(jù)的一塊內(nèi)存空間,并返回指向該內(nèi)存的首地址,該地址存放于指針變量中。4動態(tài)內(nèi)存的分配與釋放b.delete運算符free(a);deletea;//delete的使用(1)new,delete應(yīng)成對使用;(2)對一個指針只能調(diào)用一次delete;(3)用delete運算符作用的對象必須是用new分配的內(nèi)存空間的首地址。4動態(tài)內(nèi)存的分配與釋放示例2.3:voidmain(){int*p;p=newint;//分配內(nèi)存空間*p=5;cout<<*p;deletep;}//釋放內(nèi)存空間4動態(tài)內(nèi)存的分配與釋放數(shù)組的動態(tài)分配/釋放示例:intn=10;int*p=newint[n];int(*q)[5]=newint[n][5];if(q==0){cout<<"overflowmemory."<<endl;}delete[]p;delete[]q;//delete無需指明數(shù)組維數(shù)C++二維數(shù)組動態(tài)分配時,行數(shù)(第1維)可為變量。分配失敗,new返回0示例2.4
主要內(nèi)容1C++保留字2C++命名空間3C++語言的輸入輸出4動態(tài)內(nèi)存的分配與釋放5引用6C++函數(shù)新種類1、定義名字空間namespacename{作用域}2、使用名字空間usingnamespacename;或者:name::1、名字空間#include<iostream.h>cout<<“hello,theworld!”<<endl;cin>>name;//流對象cout,cin取代函數(shù)printf,scanf//算符<<,>>2、輸入輸出int*p=newint;int*q=newint[10][20];deletep;delete[]q//算符new,delete取代函數(shù)malloc,free;//成對使用,莫混搭3、動態(tài)內(nèi)存分配5引用C++中引入了一種“別名”機制,即引用。示例:inta;int*b=&a;int&c=a;a=10;*b=10;c=10;intd;b=&d;c=d;指針b是一個獨立的變量,可以通過賦值改變它的指向。引用是變量的別名,一旦賦給某個變量,則無法再改變。5引用引用主要用于函數(shù)的參數(shù)傳遞:值傳遞intfun(inta,intb)指針傳遞intfun(int*a,int*b)引用傳遞intfun(int&a,int&b)從函數(shù)定義上看,函數(shù)可接受多個入口參數(shù),但最多一個出口參數(shù)。為輸出多個參數(shù),則必須采用引用和指針傳遞。swap函數(shù)采用值傳遞方式,無法真正交換主函數(shù)中的a,b。
Voidmain(){inta=10;intb=11;swap(a,b);}Voidswap(intc,intd){inttemp=c;c=d;d=temp;}Voidswap(int*c,int*d){inttemp=*c;
*c=*d;*d=temp;}swap(&a,&b);可以采用指針傳遞方式予以解決;
Voidmain(){swap(a,b);}Voidswap(int&c,int&d){inttemp=c;c=d;d=temp;}還可以采用引用傳遞方式予以解決;
代碼相對更為簡潔,不會迷失在*和&符號中5引用此外,利用引用和指針還可以實現(xiàn)多個參數(shù)返回,擴充了函數(shù)的能力。解決辦法如下:返回參數(shù)只能是1個,但入口參數(shù)數(shù)目沒限制,因此可利用指針型,引用型入口參數(shù)作為實際返回參數(shù),如:intfunc(int&a,char&b,int*c,char*d)5引用引用的另一個好處就是:避免大數(shù)據(jù)塊復(fù)制操作。structab{inta[10000];intb;};Intfun(structabmyab);Intfun(structab*myab);Intfun(conststructab&myab);具體傳遞過程見下頁圖值傳遞引用傳遞返回類型為引用類型:函數(shù)調(diào)用作為左值例2.8,2.91、引用為定義變量名前加“&”;(區(qū)別于地址算符)2、引用不是變量,本身無法修改(修改的是引用變量)3、引用必須初始化,初始化后不能再重新賦給另一變量4、沒有引用的引用,數(shù)組定義也不能為引用,指針也不能為引用。int&a[10];int&*b;5、引用不同于指針,指針有實體,引用只是別名,沒有自己獨立的實體;有空指針,無空引用;引用不能用類型初始化;(int&b=int);6、可以用一個引用初始化另一個引用:int&a=b;int&c=a;7、函數(shù)參數(shù)可以為引用,返回類型為引用,則函數(shù)可為左值(示例2.8,2.9),注意避免返回局部變量(否則編譯警告)fun(1.2)=10;fun(a,b)++;const常量c語言中采用宏定義定義常量:#definePI3.1415926c++推薦采用const定義常量:constdoublePI=3.1415926;區(qū)別:宏定義常量無地址,編譯器在每個出現(xiàn)PI處自動替換為3.1415926const定義常量有地址存放該常數(shù)1、const定義常量必須初始化;2、定義常量后不能再更改;3、整形常量定義可省略類型int4、const定義常量帶數(shù)據(jù)類型,編譯檢測方便5、函數(shù)入口參數(shù)為const類型,則只能讀不能改。指針與常量1、指向常量的指針constchar*p=“abcd”;p[0]=‘e’;//錯誤
p=“1234”;
2、常量指針char*constp=“abcd”;p[0]=‘e’;//正確
p=“1234”;//錯誤3、指向常量的常量指針constchar*constp=“abcd”;p[0]=‘e’;//錯誤
p=“1234”;//錯誤C++字符串string類
stringa=“abcd”,b;cin>>b;cout<<a.append(“efgh”);cout<<a+”efgh”<<endl;具體使用見MSDN6C++函數(shù)新種類內(nèi)聯(lián)函數(shù):
inlineintfun(inta);內(nèi)聯(lián)函數(shù)在編譯過程中被展開嵌入到被調(diào)用處,以減少頻繁調(diào)用的時間開銷。1、頻繁使用的函數(shù)。2、消除利用棧進行的參數(shù)傳遞,函數(shù)返回過程。6C++函數(shù)新種類帶默認參數(shù)的函數(shù):
intfun(inta=10,intb=5,intc=12);
intfun(inta=10,intb=5,intc);intfun(inta,intb=5,intc=12);
intfun(inta=10,intb,intc=12);匹配方向由左至右這意味著,默認參數(shù)應(yīng)當(dāng)從右至左賦值。6C++函數(shù)新種類函數(shù)重載:
C++中允許出現(xiàn)同名函數(shù)。這些函數(shù)就是重載函數(shù)。intfun(inta);intfun(inta,intb);intfun(doublea);
依據(jù)入口參數(shù)的類型,個數(shù)。doublefun(inta);//與第一個沖突intfun(inta,intb,intc=10);//有可能與第二個沖突。函數(shù)模板:C++中允許出現(xiàn)抽象類型為參數(shù)的特殊函數(shù)。這些函數(shù)就是函數(shù)模板。Tfun(T&a);Tfun(T&a,intb);intfun(T&a);
現(xiàn)有一個函數(shù):intmax(inta,intb){return(a>b)?a,b;}現(xiàn)在我們使用該函數(shù):inta=10,b=9,c;c=max(a,b);doublea=1.2,b=2.3,c;c=max(a,b);需重寫一個函數(shù):doublemax(doublea,doubleb){return(a>b)?a,b;}函數(shù)模板的實現(xiàn):
template<類型參數(shù)表>返回類型函數(shù)名(形參表){實現(xiàn);}示例:template<classT>Tmax(Ta,Tb){ return(a>b)?a,b;}實際使用時,編譯器根據(jù)程序?qū)崊⑿问酱_定確定的函數(shù),此時得到模板函數(shù)。示例:編譯器對語句:inta,b=10,c=12;
a=max(b,c);生成如下模板函數(shù):intmax(inta,intb){ return(a>b)?a,b;}注意:模板函數(shù)不能進行自動類型轉(zhuǎn)換!template<classT>Tmin(Tx,Ty){…}
intn=3;charc=‘a(chǎn)’;d
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 滅火器的緊急逃生用法
- 概率統(tǒng)計算法復(fù)習(xí)題
- 屋面工程施工合同細節(jié)
- 違反工作紀律整改報告
- 2025年浙教新版九年級物理下冊階段測試試卷含答案
- 機器抵押合同(2篇)
- 更換廚房用品合同(2篇)
- 服務(wù)記錄協(xié)議書(2篇)
- 2025年蘇教新版八年級歷史下冊月考試卷
- 2025年粵教滬科版選修歷史上冊階段測試試卷
- 羅沙司他治療腎性貧血的療效與安全性評價演示稿件
- 農(nóng)村高中思想政治課時政教育研究的中期報告
- 環(huán)衛(wèi)清掃保潔、垃圾清運及綠化服務(wù)投標方案(技術(shù)標 )
- 醫(yī)院定崗定編方案文檔
- 4-熔化焊與熱切割作業(yè)基礎(chǔ)知識(一)
- 2023年200MW儲能電站儲能系統(tǒng)設(shè)計方案
- 個人安全與社會責(zé)任的基本知識概述
- 建筑裝飾工程計量與計價試題一及答案
- 簡易勞務(wù)合同電子版
- 明代文學(xué)緒論
- 體育賽事的策劃、組織與實施 體育賽事利益相關(guān)者
評論
0/150
提交評論