在學(xué)習(xí)了C語(yǔ)言和C++之后,這兩者之間的區(qū)別我們需要仔細(xì)的捋一捋!
一、面向過(guò)程語(yǔ)言和面向?qū)ο笳Z(yǔ)言
我們都知道C語(yǔ)言是面向過(guò)程語(yǔ)言,而C++是面向?qū)ο笳Z(yǔ)言,說(shuō)C和C++的區(qū)別,也就是在比較面向過(guò)程和面向?qū)ο蟮膮^(qū)別。
1.面向過(guò)程和面向?qū)ο蟮膮^(qū)別
(1)面向過(guò)程:面向過(guò)程編程就是分析出解決問(wèn)題的步驟,然后把這些步驟一步一步的實(shí)現(xiàn),使用的時(shí)候一個(gè)一個(gè)的依次調(diào)用就可以了。
(2)面向?qū)ο螅好嫦驅(qū)ο缶幊叹褪前褑?wèn)題分解成各個(gè)對(duì)象,建立對(duì)象的目的不是為了完成一個(gè)步驟,而是為了描述某個(gè)事物在整個(gè)解決問(wèn)題的步驟中的行為。
舉個(gè)例子:(玩五子棋)
(1)用面向過(guò)程的思想來(lái)考慮就是:開(kāi)始游戲,白子先走,繪制畫(huà)面,判斷輸贏,輪到黑子,繪制畫(huà)面,判斷輸贏,重復(fù)前面的過(guò)程,輸出最終結(jié)果。
(2)用面向?qū)ο蟮乃枷雭?lái)考慮就是:黑白雙方(兩者的行為是一樣的)、棋盤(pán)系統(tǒng)(負(fù)責(zé)繪制畫(huà)面)、規(guī)定系統(tǒng)(規(guī)定輸贏、犯規(guī)等)、輸出系統(tǒng)(輸出贏家)。
面向?qū)ο缶褪歉叨葘?shí)物抽象化(功能劃分)、面向過(guò)程就是自頂向下的編程(步驟劃分)
2.面向過(guò)程和面向?qū)ο蟮膬?yōu)缺點(diǎn)
在學(xué)習(xí)一些比較抽象的概念時(shí),由于我們的理解能力很有限,有時(shí)候一些比較恰當(dāng)?shù)睦右彩怯兄谖覀儗W(xué)習(xí)的,因此對(duì)二者的優(yōu)缺點(diǎn)比較,還是先舉例子,后總結(jié)吧!
(1)用面向過(guò)程寫(xiě)出來(lái)的程序就像一份蛋炒飯,也就是米飯和炒的菜均勻的混合在了一起,因此蛋炒飯入味均勻,不會(huì)像蓋澆飯那樣,可能有時(shí)候吃的菜多飯少,還有時(shí)候菜少飯多。但是如果你不喜歡吃蛋炒飯,只想吃肉炒飯,那么原來(lái)做的這份蛋炒飯就得倒掉了,重新做一份肉炒飯,廚師就得辛苦了!
(2)用面向?qū)ο髮?xiě)出來(lái)的程序就像一份蓋澆飯,也就是米飯和蓋菜分別做好,將蓋菜放在米飯上面,蓋澆飯雖然沒(méi)有蛋炒飯那樣入味均勻,但是如果給了你一份土豆絲蓋飯,你又不想吃了,換成牛肉蓋飯,廚師只需要將米飯上面的土豆絲倒掉,重新做一份牛肉放在上面就好了。
那么到底蛋炒飯和蓋澆飯哪個(gè)好吃呢?
我覺(jué)得各有優(yōu)劣,誰(shuí)也不能說(shuō)到底哪個(gè)好,畢竟蛋炒飯的餐館和蓋澆飯的餐館都很多,而且生意都很不錯(cuò),存在即為合理!
如果非要將二者進(jìn)行一個(gè)高地的比較的話(huà),那就得先設(shè)定一個(gè)場(chǎng)景了!
蓋澆飯的好處就是”菜”“飯”分離,從而提高了制作蓋澆飯的靈活性。飯不滿(mǎn)意就換飯,菜不滿(mǎn)意換菜。用專(zhuān)業(yè)術(shù)語(yǔ)來(lái)說(shuō)就是”可維護(hù)性“較好,”飯” 和”菜”的耦合度比較低。
蛋炒飯將”蛋”“飯”攪和在一起,想換”蛋”“飯”中任何一種都很困難,耦合度很高,以至于”可維護(hù)性”比較差。
基于上述的例子,二者的優(yōu)劣總結(jié)如下:
面向過(guò)程語(yǔ)言
優(yōu)點(diǎn):性能比面向?qū)ο蟾撸驗(yàn)轭?lèi)調(diào)用時(shí)需要實(shí)例化,開(kāi)銷(xiāo)比較大,比較消耗資源;比如單片機(jī)、嵌入式開(kāi)發(fā)、 Linux/Unix等一般采用面向過(guò)程開(kāi)發(fā),性能是最重要的因素。
缺點(diǎn):沒(méi)有面向?qū)ο笠拙S護(hù)、易復(fù)用、易擴(kuò)展
面向?qū)ο笳Z(yǔ)言:
優(yōu)點(diǎn):易維護(hù)、易復(fù)用、易擴(kuò)展,由于面向?qū)ο笥蟹庋b、繼承、多態(tài)性的特性,可以設(shè)計(jì)出低耦合的系統(tǒng),使系統(tǒng) 更加靈活、更加易于維護(hù)
缺點(diǎn):性能比面向過(guò)程低
二、具體語(yǔ)言的區(qū)別
1.關(guān)鍵字不同
C99有32個(gè)關(guān)鍵字
C++98有63個(gè)關(guān)鍵字
一些關(guān)鍵字的細(xì)微區(qū)別:
(1)struct:在C語(yǔ)言中struct定義的變量中不能有函數(shù),而在C++中可以有函數(shù)。
(2)malloc :malloc函數(shù)的返回值為void*,在C語(yǔ)言中可以賦值給任意類(lèi)型的指針,在C++中必須強(qiáng)制類(lèi)型轉(zhuǎn)換,否則報(bào)錯(cuò)。
(3)struct和class:class是對(duì)struct的擴(kuò)展,struct默認(rèn)的訪(fǎng)問(wèn)權(quán)限是public,而class默認(rèn)的訪(fǎng)問(wèn)權(quán)限是private。
2.后綴名不同
C源文件后綴.c,C++源文件后綴.cpp,在VS中,如果在創(chuàng)建源文件時(shí)什么都不給,默認(rèn)是.cpp。
3.返回值
C語(yǔ)言中,如果一個(gè)函數(shù)沒(méi)有指定返回值類(lèi)型,默認(rèn)返回int類(lèi)型;C++中,如果一個(gè)函數(shù)沒(méi)有返回值則必須指定為void。
4.參數(shù)列表
在C語(yǔ)言中,函數(shù)沒(méi)有指定參數(shù)列表時(shí),默認(rèn)可以接收任意多個(gè)參數(shù);但在C++中,因?yàn)閲?yán)格的參數(shù)類(lèi)型檢測(cè),沒(méi)有參數(shù)列表的函數(shù),默認(rèn)為 void,不接收任何參數(shù)。
5.缺省參數(shù)
缺省參數(shù)是聲明或定義函數(shù)時(shí)為函數(shù)的參數(shù)指定一個(gè)默認(rèn)值。在調(diào)用該函數(shù)時(shí),如果沒(méi)有指定實(shí)參則采用該默認(rèn)值,否則使用指定的參。(C語(yǔ)言不支持缺省參數(shù))
(1)半缺省參數(shù)
void FunTest(int _iParam1, int _iParam2 = 0 )
{}
void FunTest(int _iParam1, int _iParam2 = 0 , int _iParam3/* = 0*/)
{}
void FunTest(int _iParam1, int _iParam2 /* = 0*/,int _iParam3 = 0)
{}
(2)全缺省參數(shù)
void FunTest(int _iParam1 = 0, int _iParam = 1)
{ }
//注意:慎用缺省函數(shù),否則會(huì)產(chǎn)生二義性
void FunTest ()
{}
void FunTest (int a = 10 )
{}
//假如使用不帶實(shí)參方式調(diào)用FunTest()函數(shù)時(shí),編譯器將不知道調(diào)用哪一個(gè),產(chǎn)生二義性
注意:
(1)在半缺省的情況下,帶缺省值的參數(shù)必須放在參數(shù)列表的最后面。
(2)缺省參數(shù)不能同時(shí)在函數(shù)的聲明和函數(shù)定義中出現(xiàn),二者只能選其一。
(3)缺省值必須是常量或者全局變量。
(4)缺省參數(shù)必須通過(guò)值參或常參傳遞。
6.函數(shù)重載
函數(shù)重載:函數(shù)重載是函數(shù)的一種特殊情況,指在同一作用域中,聲明幾個(gè)功能類(lèi)似的同名函數(shù),這些同名函數(shù)的形參列表(參數(shù)個(gè)數(shù)、類(lèi)型、順序)必須不同,返回值類(lèi)型可以相同也可以不同,常用來(lái)處理實(shí)現(xiàn)功能類(lèi)似數(shù)據(jù)類(lèi)型不同的問(wèn)題。(C語(yǔ)言沒(méi)有函數(shù)重載,C++支持函數(shù)重載)。
來(lái)看個(gè)例子:
//下面兩個(gè)函數(shù)算函數(shù)重載嗎?
void FunTest6()
{ } int
FunTest6()
{
return 0;
}
//答案是不能,因?yàn)閮H僅返回值類(lèi)型不同,不能構(gòu)成重載
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7604瀏覽量
136683 -
C++
+關(guān)注
關(guān)注
22文章
2108瀏覽量
73618 -
面向?qū)ο?/span>
+關(guān)注
關(guān)注
0文章
64瀏覽量
9983
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論