RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

詳談C語(yǔ)言和C++的區(qū)別和聯(lián)系

如意 ? 來(lái)源:CSDN ? 作者:cherrydreamsover ? 2020-06-29 14:56 ? 次閱讀

在學(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。

詳談C語(yǔ)言和C++的區(qū)別和聯(lián)系

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ù)。

詳談C語(yǔ)言和C++的區(qū)別和聯(lián)系

5.缺省參數(shù)

缺省參數(shù)是聲明或定義函數(shù)時(shí)為函數(shù)的參數(shù)指定一個(gè)默認(rèn)值。在調(diào)用該函數(shù)時(shí),如果沒(méi)有指定實(shí)參則采用該默認(rèn)值,否則使用指定的參。(C語(yǔ)言不支持缺省參數(shù))

詳談C語(yǔ)言和C++的區(qū)別和聯(lián)系

(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ù)重載)。

詳談C語(yǔ)言和C++的區(qū)別和聯(lián)系

來(lái)看個(gè)例子:

//下面兩個(gè)函數(shù)算函數(shù)重載嗎?

void FunTest6()

{ } int

FunTest6()

{

return 0;

}

//答案是不能,因?yàn)閮H僅返回值類(lèi)型不同,不能構(gòu)成重載

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言和C++中那些不同的地方

    ++11標(biāo)準(zhǔn)。根據(jù)不同的標(biāo)準(zhǔn),它們的功能也會(huì)有所不同,但是越新的版本支持的編譯器越少,所以本文在討論的時(shí)候使用的C語(yǔ)言標(biāo)準(zhǔn)是C89,C++標(biāo)準(zhǔn)是C
    的頭像 發(fā)表于 12-07 14:29 ?946次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言和</b><b class='flag-5'>C++</b>中那些不同的地方

    MCS的C語(yǔ)言和標(biāo)準(zhǔn)C語(yǔ)言區(qū)別

    MCS的C語(yǔ)言和標(biāo)準(zhǔn)C語(yǔ)言區(qū)別MC9S12的C語(yǔ)言
    發(fā)表于 07-20 07:06

    C語(yǔ)言和C++編程的一些思考資料說(shuō)明

    1、其實(shí)高級(jí)語(yǔ)言和面向過(guò)程的語(yǔ)言最求的目標(biāo)都是一致的,高可復(fù)用性,另外,封裝性。我發(fā)現(xiàn)自己在寫(xiě)C語(yǔ)言的時(shí)候,總是不自覺(jué)地就引入了高級(jí)語(yǔ)言的一
    發(fā)表于 05-09 18:16 ?1次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言和</b><b class='flag-5'>C++</b>編程的一些思考資料說(shuō)明

    MATLAB 64位C語(yǔ)言和C++編譯器應(yīng)用程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是MATLAB 64位C語(yǔ)言和C++編譯器應(yīng)用程序免費(fèi)下載。
    發(fā)表于 05-21 08:00 ?4次下載
    MATLAB 64位<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言和</b><b class='flag-5'>C++</b>編譯器應(yīng)用程序免費(fèi)下載

    使用C語(yǔ)言和C++編寫(xiě)俄羅斯方塊的資料和源代碼免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用C語(yǔ)言和C++編寫(xiě)俄羅斯方塊的資料和源代碼免費(fèi)下載。
    發(fā)表于 06-10 08:00 ?4次下載
    使用<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言和</b><b class='flag-5'>C++</b>編寫(xiě)俄羅斯方塊的資料和源代碼免費(fèi)下載

    詳談數(shù)組和指針的區(qū)別聯(lián)系

    詳談數(shù)組和指針的區(qū)別聯(lián)系
    的頭像 發(fā)表于 06-29 15:18 ?2.2w次閱讀
    <b class='flag-5'>詳談</b>數(shù)組和指針的<b class='flag-5'>區(qū)別</b>與<b class='flag-5'>聯(lián)系</b>

    C語(yǔ)言和C++的特點(diǎn)與用法詳細(xì)說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語(yǔ)言和C++的特點(diǎn)與用法詳細(xì)說(shuō)明。
    的頭像 發(fā)表于 12-26 10:58 ?4405次閱讀

    嵌入式程序開(kāi)發(fā),C語(yǔ)言和C++究竟應(yīng)該用哪個(gè)?

    用?C++更好用?小明是一名嵌入式軟件工程師,他擅長(zhǎng)C語(yǔ)言和C++編程,現(xiàn)在需要在一款提供C++C
    發(fā)表于 11-03 14:21 ?60次下載
    嵌入式程序開(kāi)發(fā),<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言和</b><b class='flag-5'>C++</b>究竟應(yīng)該用哪個(gè)?

    C語(yǔ)言和C++到底是什么關(guān)系

    首先C++C語(yǔ)言本來(lái)就是兩種不同的編程語(yǔ)言,但C++確實(shí)是對(duì)C
    的頭像 發(fā)表于 06-20 11:28 ?4947次閱讀

    如何選擇創(chuàng)建c語(yǔ)言和c++

    選擇創(chuàng)建 C 語(yǔ)言和 C++ 都需要綜合考慮多個(gè)因素。在決定使用哪種語(yǔ)言之前,我們需要對(duì)這兩種語(yǔ)言的特點(diǎn)、優(yōu)缺點(diǎn)、適用場(chǎng)景、學(xué)習(xí)成本等進(jìn)行全
    的頭像 發(fā)表于 11-27 15:58 ?599次閱讀

    vb語(yǔ)言和c++語(yǔ)言區(qū)別

    VB語(yǔ)言和C++語(yǔ)言是兩種不同的編程語(yǔ)言,雖然它們都屬于高級(jí)編程語(yǔ)言,但在設(shè)計(jì)和用途上有很多區(qū)別
    的頭像 發(fā)表于 02-01 10:20 ?2257次閱讀

    c語(yǔ)言,c++,java,python區(qū)別

    C語(yǔ)言C++、Java和Python是四種常見(jiàn)的編程語(yǔ)言,各有優(yōu)點(diǎn)和特點(diǎn)。 C語(yǔ)言
    的頭像 發(fā)表于 02-05 14:11 ?2360次閱讀

    plc編程語(yǔ)言c語(yǔ)言聯(lián)系 c語(yǔ)言和PLC有什么區(qū)別

    語(yǔ)言,主要用于開(kāi)發(fā)各種應(yīng)用程序。盡管PLC編程語(yǔ)言和C語(yǔ)言有一些相似之處,但它們之間也存在一些明顯的區(qū)別。 首先,PLC編程
    的頭像 發(fā)表于 02-05 14:21 ?4090次閱讀

    PLC編程語(yǔ)言和C語(yǔ)言區(qū)別

    在工業(yè)自動(dòng)化和計(jì)算機(jī)編程領(lǐng)域中,PLC(可編程邏輯控制器)編程語(yǔ)言和C語(yǔ)言各自扮演著重要的角色。盡管兩者都是編程語(yǔ)言,但它們?cè)诙鄠€(gè)方面存在顯著的區(qū)別
    的頭像 發(fā)表于 06-14 17:11 ?2770次閱讀

    C語(yǔ)言和C++中結(jié)構(gòu)體的區(qū)別

    同樣是結(jié)構(gòu)體,看看在C語(yǔ)言和C++中有什么區(qū)別?
    的頭像 發(fā)表于 10-30 15:11 ?198次閱讀
    RM新时代网站-首页