亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        淺析C++在非OOP方面對(duì)C的改進(jìn)

        2014-01-01 00:00:00張永超
        數(shù)字化用戶(hù) 2014年5期

        【摘 要】C++是在C語(yǔ)言的基礎(chǔ)上發(fā)展起來(lái)的面向過(guò)程程序設(shè)計(jì)和面向?qū)ο蟪绦蛟O(shè)計(jì)的一門(mén)通用語(yǔ)言,它不僅引入了類(lèi)和對(duì)象等重要概念,而且對(duì)C語(yǔ)言的不足進(jìn)行了改進(jìn)。本文結(jié)合作者多年教學(xué)實(shí)踐,從函數(shù)、引用、I/0、內(nèi)存分配等方面,對(duì)C++在非OOP方面對(duì)C的改進(jìn)進(jìn)行了詳細(xì)地分析和總結(jié)。

        【關(guān)鍵詞】C++ OOP 引用

        在面向?qū)ο蟮某绦蛟O(shè)計(jì)OOP(Object-Oriented Programming)方法出現(xiàn)以前,我們主要采用面向過(guò)程的程序設(shè)計(jì)方法,C是面向過(guò)程的程序設(shè)計(jì)語(yǔ)言的典型代表。早期的計(jì)算機(jī)主要用于科學(xué)計(jì)算等領(lǐng)域,例如計(jì)算炮彈的飛行軌跡,主要是設(shè)計(jì)出一個(gè)計(jì)算方法或解決問(wèn)題的過(guò)程,所以早期的軟件開(kāi)發(fā)所面臨的問(wèn)題比較簡(jiǎn)單。隨著計(jì)算機(jī)領(lǐng)域的擴(kuò)展,計(jì)算機(jī)所處理的問(wèn)題日益復(fù)雜,軟件系統(tǒng)的規(guī)模和復(fù)雜性空前擴(kuò)大,以至于軟件的復(fù)雜度和其中所包含的錯(cuò)誤讓程序員無(wú)法控制,所以就產(chǎn)生了60年代初期的軟件危機(jī)。面向?qū)ο蟮某绦蛟O(shè)計(jì)技術(shù)很好的解決了問(wèn)題,而C++語(yǔ)言正是面向?qū)ο笏枷牒图夹g(shù)的具體體現(xiàn)。C++是在C的基礎(chǔ)上發(fā)展起來(lái)的,不僅引入了類(lèi)和對(duì)象、繼承、多態(tài)等概念,而且在非OOP方面對(duì)C也進(jìn)行了改進(jìn)和擴(kuò)充。

        一、函數(shù)方面

        (一)重載/過(guò)載(overload)

        C++中允許兩個(gè)或者多個(gè)不同的函數(shù)可以使用同一個(gè)函數(shù)名,即一個(gè)函數(shù)名可以對(duì)應(yīng)多個(gè)函數(shù)的實(shí)現(xiàn)。這是C++增強(qiáng)的功能,C語(yǔ)言中是每個(gè)函數(shù)必須有唯一的名稱(chēng)。例如可以在一個(gè)程序中定義兩個(gè)同名的函數(shù)int s(int x,int y){return x+y}和int s(int x,int y,int z){return x+y+z}。同一函數(shù)被多次定義或?qū)崿F(xiàn),編譯器會(huì)根據(jù)函數(shù)參數(shù)個(gè)數(shù)或參數(shù)類(lèi)型的不同來(lái)正確的調(diào)用。在使用重載時(shí),需要注意一下四點(diǎn)1.不能因?yàn)榉祷刂殿?lèi)型不同而重載。例如:int max(int a,int b)和float max(int a,int b)。2.重載不是重復(fù)。例如:int max(int a,int b)和float max(int c,int d)。3.不能因?yàn)閠ypedef而重載。如:typedef int INT; int max(int a,int b); float max(INT a,INT b),因?yàn)閠ypedef定義的是新的類(lèi)型的名字,而不是新的類(lèi)型。4.防止有二義性的調(diào)用。如:int fun(int a,int b=0); int fun(int a),用fun(3)去調(diào)用。

        (二)內(nèi)聯(lián)函數(shù)(inline function)

        因?yàn)槲覀冊(cè)谡{(diào)用函數(shù)時(shí),需要先保存現(xiàn)場(chǎng)狀態(tài)和返回地址,然后轉(zhuǎn)到子函數(shù)的代碼起始地址去執(zhí)行,子函數(shù)執(zhí)行完后,又需要取出先前保存的返回地址和現(xiàn)場(chǎng)狀態(tài),再繼續(xù)執(zhí)行,這一切都需要時(shí)間和空間方面的開(kāi)銷(xiāo),因此對(duì)一些功能簡(jiǎn)單,規(guī)模較小,使用頻繁的函數(shù),可以設(shè)計(jì)為內(nèi)聯(lián)函數(shù)。聲明格式:inline 類(lèi)型說(shuō)明 函數(shù)名(形參表);內(nèi)聯(lián)函數(shù)具有一般函數(shù)的特性,不同之處在于對(duì)函數(shù)調(diào)用的處理,它不是在函數(shù)調(diào)用時(shí)發(fā)生轉(zhuǎn)移,而是在編譯時(shí)由編譯器將函數(shù)體嵌入到每一個(gè)函數(shù)調(diào)用的語(yǔ)句處,這樣就節(jié)省了參數(shù)傳遞和控制轉(zhuǎn)移等開(kāi)銷(xiāo),從而解決了函數(shù)調(diào)用的效率問(wèn)題。因?yàn)楹瘮?shù)有跳轉(zhuǎn)和返回時(shí),程序執(zhí)行的效率會(huì)急劇下降。他從功能上相當(dāng)于C中的宏,卻沒(méi)有宏的副作用,即消除了使用宏定義#define帶來(lái)的不安全性(產(chǎn)生這個(gè)問(wèn)題的原因是:C中宏定義#define的代碼是被直接展開(kāi)的,而C++的內(nèi)聯(lián)函數(shù)的代碼是被替代的)。使用時(shí)應(yīng)該注意:1.內(nèi)聯(lián)函數(shù)體內(nèi)不能有循環(huán)語(yǔ)句和switch語(yǔ)句。2.內(nèi)聯(lián)函數(shù)的定義必須出現(xiàn)在第一次被調(diào)用之前。3.編譯時(shí)用函數(shù)代碼替代了調(diào)用語(yǔ)句,增加了目標(biāo)程序的代碼量,雖然不發(fā)生跳轉(zhuǎn)了,節(jié)省了時(shí)間,卻增加了空間開(kāi)銷(xiāo),可見(jiàn),它是以空間增大的代價(jià)來(lái)?yè)Q取時(shí)間的節(jié)省。

        (三)函數(shù)原型(function prototype)

        C語(yǔ)言建議我們?yōu)槊總€(gè)函數(shù)建立原型,而C++則要求必須為每個(gè)函數(shù)建立原型,說(shuō)明函數(shù)的返回值類(lèi)型、函數(shù)名稱(chēng)、參數(shù)類(lèi)型及個(gè)數(shù)。只要函數(shù)調(diào)用在自定義函數(shù)之前,程序員必須在源代碼中說(shuō)明函數(shù)原型。函數(shù)原型可不包含形參變量名,只包含形參數(shù)類(lèi)型名。如:int fun(int ,int);等價(jià)于int fun(int a,int b);目的是在編譯時(shí)檢查調(diào)用函數(shù)是否與預(yù)先說(shuō)明的原型一致,以維護(hù)程序的正確性。函數(shù)原型格式為:返回類(lèi)型 函數(shù)名(參數(shù)表);使用函數(shù)原型時(shí)應(yīng)注意:1.函數(shù)原型是一條語(yǔ)句,必須以分號(hào)結(jié)束。2.當(dāng)一個(gè)函數(shù)的定義在前而調(diào)用在后時(shí),可以不寫(xiě)它的原型,因?yàn)檫@時(shí)的函數(shù)定義的說(shuō)明部分就起到了函數(shù)原型的作用。3.主函數(shù)不必說(shuō)明原型,它被認(rèn)為是一個(gè)自動(dòng)說(shuō)明原型的函數(shù),且不存在被調(diào)用的問(wèn)題。4.函數(shù)的原型中如果沒(méi)有寫(xiě)返回類(lèi)型,則C++的默認(rèn)返回類(lèi)型為int。5.如果沒(méi)有返回值,函數(shù)必須聲明為void,比如把main()聲明為void,則主函數(shù)中就不用寫(xiě)有return 0了。

        (四)缺省參數(shù)(default parameter)

        C++中可以在說(shuō)明函數(shù)原型或函數(shù)定義時(shí),給一個(gè)或多個(gè)參數(shù)指定缺省值,這樣在調(diào)用該函數(shù)時(shí),如果省略了其中的某個(gè)參數(shù),系統(tǒng)會(huì)自動(dòng)以用戶(hù)指定缺省值作為該參數(shù)的值。例如:int f(int x,int y=10);在編程時(shí)需要注意:1.當(dāng)一個(gè)函數(shù)帶有多個(gè)參數(shù)時(shí),C++沒(méi)有規(guī)定函數(shù)調(diào)用時(shí)實(shí)參的求值順序,而編譯器根據(jù)對(duì)代碼進(jìn)行優(yōu)化的需要自行規(guī)定對(duì)實(shí)參的求值順序,有的編譯器規(guī)定自左向右,有的自右向左,如果實(shí)參表達(dá)式中帶有副作用的運(yùn)算符(++,--等)時(shí),可能造成二義性。例如:int add_int(int x,int y){return x+y;}void main(){int c=4,d=6;cout<< add_int(++c,c+d)<

        (五)形參的寫(xiě)法不在支持舊式的C函數(shù)收不寫(xiě)法。

        intfun(int a,int b)不能寫(xiě)成int a,b;int fun(x,y)。而且變量定義的位置不一定在函數(shù)的首部,可以在任意位置。C中要求所有局部變量的定義必須在執(zhí)行語(yǔ)句之前。

        二、引用(Reference)

        引用是某個(gè)變量或者對(duì)象的別名。引用的值將隨所引用的變量的值而改變。定義格式:<類(lèi)型><引用名>=<初始值>;例如:int m;int n=m;n就是m的引用。需要注意的是:1.引用不占單獨(dú)的內(nèi)存空間, 上面的m和n是同一變量單元。2.聲明引用時(shí),必須對(duì)它初始化,不能聲明完成后再賦值。3.指針是通過(guò)地址間接訪(fǎng)問(wèn)變量,引用是通過(guò)別名直接訪(fǎng)問(wèn)變量,使用引用可以簡(jiǎn)化程序。4.引用運(yùn)算符“”僅在聲明引用時(shí)使用,其他時(shí)候“”依然表示地址操作符。引用的主要用途是可以用做函數(shù)參數(shù)和函數(shù)的返回值。

        三、其他當(dāng)面

        (一)常量推薦用const代替define

        例如:const double pi=3.1415926;const產(chǎn)生一個(gè)具有類(lèi)型的常量。const定義一個(gè)局部變量,define范圍為整個(gè)源文件。使用const定義常量是一個(gè)標(biāo)準(zhǔn)說(shuō)明語(yǔ)句,以分號(hào)結(jié)束。

        (二)動(dòng)態(tài)內(nèi)存分配時(shí)使用new和delete。new和delete操作符是C++語(yǔ)言的一部分,無(wú)需包含頭文件

        從C++的立場(chǎng)來(lái)看,不能使用C語(yǔ)言中的malloc()函數(shù)的一個(gè)原因是,它在分配空間時(shí)不能調(diào)用構(gòu)造函數(shù)。類(lèi)對(duì)象的建立是分配空間、構(gòu)造結(jié)構(gòu)以及初始化的三位一體,他們統(tǒng)一由構(gòu)造函數(shù)完成。而用new創(chuàng)建對(duì)象時(shí),會(huì)自動(dòng)調(diào)用構(gòu)造函數(shù),用delete刪除對(duì)象時(shí),也會(huì)自動(dòng)調(diào)用析構(gòu)函數(shù)。

        (三)I/O流類(lèi)控制

        C語(yǔ)言提供的scanf()和printf()標(biāo)準(zhǔn)輸入輸出函數(shù)存在缺陷:非類(lèi)型安全,不可擴(kuò)充。比如C++中大量的類(lèi)和對(duì)象并不是基本數(shù)據(jù)類(lèi)型,C語(yǔ)言的輸入輸出函數(shù)根本無(wú)法識(shí)別,因此C++提供了一個(gè)I/O流庫(kù),用cin對(duì)象來(lái)處理標(biāo)準(zhǔn)輸入,用cout來(lái)處理標(biāo)準(zhǔn)輸出。

        (四)支持單行注釋//

        我們可以用C語(yǔ)言中的/*……*/進(jìn)行大范圍注釋?zhuān)?/……進(jìn)行單行注釋。

        四、結(jié)論

        C++語(yǔ)言是在C語(yǔ)言的基礎(chǔ)上發(fā)展起來(lái)的,它繼承了傳統(tǒng)C語(yǔ)言的精華,增加了面向?qū)ο蟮奶卣鳎€在面向過(guò)程方面對(duì)C語(yǔ)言進(jìn)行了許多的擴(kuò)充和改進(jìn)。本文從函數(shù)、引用、I/0、內(nèi)存分配等方面,對(duì)這些改進(jìn)進(jìn)行了詳細(xì)地分析,希望對(duì)C++相關(guān)編程人員有所幫助。

        參考文獻(xiàn):

        [1]呂鳳翥.C++語(yǔ)言基礎(chǔ)教程(第二版)[M].北京:清華大學(xué)出版社,2007.

        [2] Bruce Eckel.C++編程思想[M],北京:機(jī)械工業(yè)出版社,2011.

        [3] Stanley B.Lippman.C++Primer(第四版) [M].北京:人民郵電出版社,2008.

        作者簡(jiǎn)介:

        張永超(1980-),男,漢族,陜西寶雞人,吉林化工學(xué)院講師,主要從事計(jì)算機(jī)高級(jí)程序設(shè)計(jì)與數(shù)據(jù)庫(kù)等方面的研究。

        日韩在线精品视频观看| 久久夜色精品国产噜噜亚洲av| 久久亚洲精品ab无码播放| 久久精品亚洲精品毛片| 国产又湿又爽又猛的视频| 国产性自爱拍偷在在线播放| 蜜臀av 国内精品久久久| 国产激情在观看| 一区二区三区日本久久| 337p日本欧洲亚洲大胆色噜噜| 欧美怡红院免费全部视频| 动漫在线无码一区| 中文片内射在线视频播放| 久久婷婷国产综合精品| 成人看片黄a免费看那个网址 | 色婷婷五月综合久久| 亚洲肥老太bbw中国熟女| 色老汉亚洲av影院天天精品| 国产在线一区二区av| 色妞色视频一区二区三区四区| 99在线精品国产不卡在线观看 | 色综合另类小说图片区| 永久免费看黄在线观看| 肉色丝袜足j视频国产| 亚洲精品久久久久久动漫| 在线偷窥制服另类| 日本一区二区免费高清| 一本色道久久综合无码人妻| 欧美伊人网| 日本免费三片在线播放| 亚洲a∨无码精品色午夜| 九九视频在线观看视频6| 无码伊人久久大香线蕉| 亚洲一区二区三区精品| 天干天干天啪啪夜爽爽av| 高清国产一级毛片国语| 九一精品少妇一区二区三区| 国产伦人人人人人人性| 国产91网址| 国产激情在线观看视频网址| 中国美女a级毛片|