婷婷亚洲天堂影院-国产精品豆花视频www-伊人影院在线观看-日本少妇浓毛bbwbbwbbw-av网站观看-亚州欧美在线-91精品国产乱码久-任我爽精品视频在线播放-日本视频不卡-亚洲国产精品va在线观看香蕉-国产毛片乡下农村妇女-国产成人免费ā片在线观看老同学-欧美日韩免费在线-成人无码视频免费播放-色综合美女-免费毛片av

電子開發(fā)網(wǎng)

電子開發(fā)網(wǎng)電子設(shè)計 | 電子開發(fā)網(wǎng)Rss 2.0 會員中心 會員注冊
搜索: 您現(xiàn)在的位置: 電子開發(fā)網(wǎng) >> 編程學(xué)習(xí) >> C語言 >> 正文

C語言和C++的區(qū)別和聯(lián)系_面向過程語言和面向?qū)ο笳Z言

作者:佚名    文章來源:本站原創(chuàng)    點(diǎn)擊數(shù):    更新時間:2023/10/10

C語言雖說經(jīng)常和C++在一起被大家提起,但可千萬不要以為它們是一種編程語言。我們來介紹C語言和C++中的區(qū)別和聯(lián)系。

首先C++和C語言本來就是兩種不同的編程語言,但C++確實(shí)是對C語言的擴(kuò)充和延伸,并且對C語言提供后向兼容的能力。

更多C語言/C++學(xué)習(xí)資料,視頻,電子書籍,教程
 

一、C語言是面向過程語言,而C++是面向?qū)ο笳Z言

我們都知道C語言是面向過程語言,而C++是面向?qū)ο笳Z言,說C語言和C++的區(qū)別和聯(lián)系,也就是在比較面向過程和面向?qū)ο蟮膮^(qū)別。

1、面向過程和面向?qū)ο蟮膮^(qū)別

面向過程:面向過程編程就是分析出解決問題的步驟,然后把這些步驟一步一步的實(shí)現(xiàn),使用的時候一個一個的依次調(diào)用就可以了。

面向?qū)ο螅好嫦驅(qū)ο缶幊叹褪前褑栴}分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描述某個事物在整個解決問題的步驟中的行為。

2、面向過程和面向?qū)ο蟮膬?yōu)缺點(diǎn)

在學(xué)習(xí)一些比較抽象的概念時,由于我們的理解能力很有限,有時候一些比較恰當(dāng)?shù)睦右彩怯兄谖覀儗W(xué)習(xí)的,因此對二者的優(yōu)缺點(diǎn)比較,還是先舉例子,后總結(jié)吧!

(1)用面向過程寫出來的程序就像一份蛋炒飯,也就是米飯和炒的菜均勻的混合在了一起,因此蛋炒飯入味均勻,不會像蓋澆飯那樣,可能有時候吃的菜多飯少,還有時候菜少飯多。但是如果你不喜歡吃蛋炒飯,只想吃肉炒飯,那么原來做的這份蛋炒飯就得倒掉了,重新做一份肉炒飯,廚師就得辛苦了!

(2)用面向?qū)ο髮懗鰜淼某绦蚓拖褚环萆w澆飯,也就是米飯和蓋菜分別做好,將蓋菜放在米飯上面,蓋澆飯雖然沒有蛋炒飯那樣入味均勻,但是如果給了你一份土豆絲蓋飯,你又不想吃了,換成牛肉蓋飯,廚師只需要將米飯上面的土豆絲倒掉,重新做一份牛肉放在上面就好了。

那么到底蛋炒飯和蓋澆飯哪個好吃呢?

誰也不能說到底哪個好,畢竟蛋炒飯的餐館和蓋澆飯的餐館都很多,而且生意都很不錯,存在即為合理!

如果非要將二者進(jìn)行一個高地的比較的話,那就得先設(shè)定一個場景了!

蓋澆飯的好處就是”菜”“飯”分離,從而提高了制作蓋澆飯的靈活性。飯不滿意就換飯,菜不滿意換菜。用專業(yè)術(shù)語來說就是”可維護(hù)性“較好,”飯” 和”菜”的耦合度比較低。

蛋炒飯將”蛋”“飯”攪和在一起,想換”蛋”“飯”中任何一種都很困難,耦合度很高,以至于”可維護(hù)性”比較差。

二者的簡單總結(jié)如下:

面向過程語言

優(yōu)點(diǎn):性能比面向?qū)ο蟾撸驗(yàn)轭愓{(diào)用時需要實(shí)例化,開銷比較大,比較消耗資源;比如單片機(jī)、嵌入式開發(fā)、 Linux/Unix等一般采用面向過程開發(fā),性能是最重要的因素。

缺點(diǎn):沒有面向?qū)ο笠拙S護(hù)、易復(fù)用、易擴(kuò)展

面向?qū)ο笳Z言:

優(yōu)點(diǎn):易維護(hù)、易復(fù)用、易擴(kuò)展,由于面向?qū)ο笥蟹庋b、繼承、多態(tài)性的特性,可以設(shè)計出低耦合的系統(tǒng),使系統(tǒng) 更加靈活、更加易于維護(hù)

缺點(diǎn):性能比面向過程低

二、具體語言上C語言和C++的區(qū)別和聯(lián)系

1、關(guān)鍵字的不同

C語言有32個關(guān)鍵字

C++有63個關(guān)鍵字

2、后綴名不同

C源文件后綴.c,C++源文件后綴.cpp,在VS中,如果在創(chuàng)建源文件時什么都不給,默認(rèn)是.cpp。

3、返回值

C語言中,如果一個函數(shù)沒有指定返回值類型,默認(rèn)返回int類型;C++中,如果一個函數(shù)沒有返回值則必須指定為void。

4、參數(shù)列表

在C語言中,函數(shù)沒有指定參數(shù)列表時,默認(rèn)可以接收任意多個參數(shù);但在C++中,因?yàn)閲?yán)格的參數(shù)類型檢測,沒有參數(shù)列表的函數(shù),默認(rèn)為 void,不接收任何參數(shù)。

5、缺省參數(shù)

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

注意:

  • 在半缺省的情況下,帶缺省值的參數(shù)必須放在參數(shù)列表的最后面。

  • 缺省參數(shù)不能同時在函數(shù)的聲明和函數(shù)定義中出現(xiàn),二者只能選其一。

  • 缺省值必須是常量或者全局變量。

  • 缺省參數(shù)必須通過值參或常參傳遞。

6、函數(shù)重載

函數(shù)重載:函數(shù)重載是函數(shù)的一種特殊情況,指在同一作用域中,聲明幾個功能類似的同名函數(shù),這些同名函數(shù)的形參列表(參數(shù)個數(shù)、類型、順序)必須不同,返回值類型可以相同也可以不同,常用來處理實(shí)現(xiàn)功能類似數(shù)據(jù)類型不同的問題。(C語言沒有函數(shù)重載,C++支持函數(shù)重載)。

C語言中產(chǎn)生函數(shù)符號的規(guī)則是根據(jù)名稱產(chǎn)生,這也就注定了c語言不存在函數(shù)重載的概念。而C++生成函數(shù)符號則考慮了函數(shù)名、參數(shù)個數(shù)、參數(shù)類型。需要注意的是函數(shù)的返回值并不能作為函數(shù)重載的依據(jù),也就是說int sum和double sum這兩個函數(shù)是不能構(gòu)成重載的!

我們的函數(shù)重載也屬于多態(tài)的一種,這就是所謂的靜多態(tài)。

靜多態(tài):函數(shù)重載,函數(shù)模板

動多態(tài)(運(yùn)行時的多態(tài)):繼承中的多態(tài)(虛函數(shù))。

使用重載的時候需要注意作作用域問題:請看如下代碼。

#include 
using namespace std;
bool compare(int a,int b)
{
return a > b;
}
bool compare(double a,double b)
{
return a > b;
}
int main()
{
//bool compare(int a,int b);
compare(10,20);
compare(10.5,20.5);
return 0;
}

我在全局作用域定義了兩個函數(shù),它們由于參數(shù)類型不同可以構(gòu)成重載,此時main函數(shù)中調(diào)用則可以正確的調(diào)用到各自的函數(shù)。

但是請看main函數(shù)中被注釋掉的一句代碼。如果我將它放出來,則會提出警告:將double類型轉(zhuǎn)換成int類型可能會丟失數(shù)據(jù)。

這就意味著我們編譯器針對下面兩句調(diào)用都調(diào)用了參數(shù)類型int的compare。由此可見,編譯器調(diào)用函數(shù)時優(yōu)先在局部作用域搜索,若搜索成功則全部按照該函數(shù)的標(biāo)準(zhǔn)調(diào)用。若未搜索到才在全局作用域進(jìn)行搜索。

總結(jié):C語言不存在函數(shù)重載,C++根據(jù)函數(shù)名參數(shù)個數(shù)參數(shù)類型判斷重載,屬于靜多態(tài),必須同一作用域下才叫重載。

7、const

C語言中被const修飾的變量不是常量,叫做常變量或者只讀變量,這個常變量是無法當(dāng)作數(shù)組下標(biāo)的。然而在C++中const修飾的變量可以當(dāng)作數(shù)組下標(biāo)使用,成為了真正的常量。這就是C++對const的擴(kuò)展。

C語言中的const:被修飾后不能做左值,可以不初始化,但是之后沒有機(jī)會再初始化。不可以當(dāng)數(shù)組的下標(biāo),可以通過指針修改。簡單來說,它和普通變量的區(qū)別只是不能做左值而已。其他地方都是一樣的。

C++中的const:真正的常量。定義的時候必須初始化,可以用作數(shù)組的下標(biāo)。const在C++中的編譯規(guī)則是替換(和宏很像),所以它被看作是真正的常量。也可以通過指針修改。需要注意的是,C++的指針有可能退化成C語言的指針。比如以下情況:

int b=20;
const int a = b;

這時候的a就只是一個普通的C語言的const常變量了,已經(jīng)無法當(dāng)數(shù)組的下標(biāo)了。(引用了一個編譯階段不確定的值)

const在生成符號時,是local符號。即在本文件中才可見。如果非要在別的文件中使用它的話,在文件頭部聲明:extern cosnt int data = 10;這樣生成的符號就是global符號。

總結(jié):C中的const叫只讀變量,只是無法做左值的變量;C++中的const是真正的常量,但也有可能退化成c語言的常量,默認(rèn)生成local符號。

8、引用

說到引用,我們第一反應(yīng)就是想到了他的兄弟:指針。引用從底層來說和指針就是同一個東西,但是在編譯器中它的特性和指針完全不同。

int  a = 10;
int  &b=a;
int  *p = &a;
// b = 20;
// *p=20;

首先定義一個變量a = 10,然后我們分別定義一個引用b以及一個指針p指向a。我們來轉(zhuǎn)到反匯編看看底層的實(shí)現(xiàn):

 

可以看到底層實(shí)現(xiàn)完全一致,取a的地址放入eax寄存器,再將eax中的值存入引用b/指針p的內(nèi)存中。至此我們可以說(在底層)引用本質(zhì)就是一個指針。

了解了底層實(shí)現(xiàn),我們回到編譯器。我們看到對a的值的修改,指針p的做法是*p = 20;即進(jìn)行解引用后替換值。底層實(shí)現(xiàn):

再來看看引用修改:

我們看到修改a的值的方法也是一樣的,也是解引用。只是我們在調(diào)用的時候有所不同:調(diào)用p時需要*p解引用,b則直接使用就可以。由此我們 推斷出:引用在直接使用時是指針解引用。p直接使用則是它自己的地址。

這樣我們也了解了,我們給引用開辟的這塊內(nèi)存是根本訪問不到的。如果直接用就直接解引用了。即使打印&b,輸出的也是a的地址。

在此附上將指針轉(zhuǎn)為引用的小技巧:int *p = &a,我們將 引用符號移到左邊 將 *替換即可:int &p = a。

接下來看看如何創(chuàng)建數(shù)組的引用:

int array[10] = {0}; //定義一個數(shù)組

我們知道,array拿出來使用的話就是數(shù)組array的首元素地址。即是int *類型。

那么&array是什么意思呢?int **類型,用來指向array[0]地址的一個地址嗎?不要想當(dāng)然了,&array是整個數(shù)組類型。

那么要定義一個數(shù)組引用,按照上面的小訣竅,先來寫寫數(shù)組指針吧:

int (*q) [10] = &array;

將右側(cè)的&對左邊的*進(jìn)行覆蓋:

int (&q)[10] = array;

測試sizeof(q) = 10。我們成功創(chuàng)建了數(shù)組引用。

經(jīng)過上面的詳解 ,我們知道了引用其實(shí)就是取地址。那么我們都知道一個立即數(shù)是沒有地址的,即

int &b = 10;

這樣的代碼是無法通過編譯的。那如果你就是非要引用一個立即數(shù),其實(shí)也不是沒有辦法:

const int &b = 10;

即將這個立即數(shù)用const修飾一下,就可以了。為什么呢?

這時因?yàn)楸籧onst修飾的都會產(chǎn)生一個臨時量來保存這個數(shù)據(jù),自然就有地址可取了。

9、malloc,free && new,delete

這個問題很有意思,也是重點(diǎn)需要關(guān)注的問題。malloc()和free()是C語言中動態(tài)申請內(nèi)存和釋放內(nèi)存的標(biāo)準(zhǔn)庫中的函數(shù)。而new和delete是C++運(yùn)算符、關(guān)鍵字。new和delete底層其實(shí)還是調(diào)用了malloc和free。它們之間的區(qū)別有以下幾個方面:

1)、malloc和free是函數(shù),new和delete是運(yùn)算符。

2)、malloc在分配內(nèi)存前需要大小,new不需要。

例如:int *p1 = (int *)malloc(sizeof(int));

int *p2 = new int; //int *p3 = new int(10);

malloc時需要指定大小,還需要類型轉(zhuǎn)換。new時不需要指定大小因?yàn)樗梢詮慕o出的類型判斷,并且還可以同時賦初始值。

3)、malloc不安全,需要手動類型轉(zhuǎn)換,new不需要類型轉(zhuǎn)換。

詳見上一條。

4)、free只釋放空間,delete先調(diào)用析構(gòu)函數(shù)再釋放空間(如果需要)。

與第⑤條對應(yīng),如果使用了復(fù)雜類型,先析構(gòu)再call operator delete回收內(nèi)存。

5)、new是先調(diào)用構(gòu)造函數(shù)再申請空間(如果需要)。

與第④條對應(yīng),我們在調(diào)用new的時候(例如int *p2 = new int;這句代碼 ),底層代碼的實(shí)現(xiàn)是:首先push 4字節(jié)(int類型的大小),隨后call operator new函數(shù)分配了內(nèi)存。由于我們這句代碼并未涉及到復(fù)雜類型(如類類型),所以也就沒有構(gòu)造函數(shù)的調(diào)用。如下是operator new的源代碼,也是new實(shí)現(xiàn)的重要函數(shù):

void *__CRTDECL  operator new(size_t size) _THROW1(_STD bad_alloc)
{   // try to allocate size bytes
void  *p;
while ((p = malloc(size))==0)
if ( _callnewh(size)==0)
{
// report no memory
THROW_NCEE(_XSTD bad alloc,);
}
return (p);
}

 

我們可以看到,首先malloc(size)申請參數(shù)字節(jié)大小的內(nèi)存,如果失敗(malloc失敗返回0)則進(jìn)入判斷:如果_callnewh(size)也失敗的話,拋出bad_alloc異常。_callnewh()這個函數(shù)是在查看new handler是否可用,如果可用會釋放一部分內(nèi)存再返回到malloc處繼續(xù)申請,如果new handler不可用就會拋出異常。

6)、內(nèi)存不足(開辟失敗)時處理方式不同。

malloc失敗返回0,new失敗拋出bad_alloc異常。

7)、new和malloc開辟內(nèi)存的位置不同。

malloc開辟在堆區(qū),new開辟在自由存儲區(qū)域。

8)、new可以調(diào)用malloc(),但malloc不能調(diào)用new。

new就是用malloc()實(shí)現(xiàn)的,new是C++獨(dú)有malloc當(dāng)然無法調(diào)用。

10、作用域

C語言中作用域只有兩個:局部,全局。C++中則是有:局部作用域,類作用域,名字空間作用域三種。

所謂名字空間就是namespace,我們定義一個名字空間就是定義一個新作用域。訪問時需要以如下方式訪問(以std為例)

std::cin<< "123" <<std::endl;

例如我們有一個名字空間叫Myname,其中有一個變量叫做data。如果我們希望在其他地方使用data的話,需要在文件頭聲明:using Myname::data;這樣一來data就使用的是Myname中的值了。可是這樣每個符號我們都得聲明豈不是累死?

我們只要using namespace Myname;就可以將其中所有符號導(dǎo)入了。

Tags:C語言,面向過程語言,面向?qū)ο笳Z言  
責(zé)任編輯:admin
請文明參與討論,禁止漫罵攻擊。 昵稱:注冊  登錄
[ 查看全部 ] 網(wǎng)友評論
關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁面
下到頁底
晶體管查詢
婷婷亚洲天堂影院-国产精品豆花视频www-伊人影院在线观看-日本少妇浓毛bbwbbwbbw-av网站观看-亚州欧美在线-91精品国产乱码久-任我爽精品视频在线播放-日本视频不卡-亚洲国产精品va在线观看香蕉-国产毛片乡下农村妇女-国产成人免费ā片在线观看老同学-欧美日韩免费在线-成人无码视频免费播放-色综合美女-免费毛片av
<button id="4i884"></button>
  • <abbr id="4i884"><source id="4i884"></source></abbr>
  • <code id="4i884"><tr id="4i884"></tr></code>
  • <rt id="4i884"></rt>
    <li id="4i884"></li>
  • <rt id="4i884"><tr id="4i884"></tr></rt>
  • 国产在线播放观看| 少妇黄色一级片| 九热视频在线观看| 亚洲欧美一区二区三区不卡| 在线观看的毛片| 超碰91在线播放| 欧美黑人又粗又大又爽免费| 四虎成人在线播放| 欧美色图另类小说| 欧美一级免费在线| 可以看污的网站| 少妇人妻大乳在线视频| 9191国产视频| 国产成人av影视| 日韩一级片一区二区| 国产九九在线观看| 国产日产欧美视频| 能在线观看的av| 18岁视频在线观看| av免费观看大全| 国产激情在线观看视频| jizz欧美性11| 日本熟妇人妻xxxxx| 欧美日韩中文字幕在线播放| av无码精品一区二区三区| 三级av免费看| www激情五月| 欧美丰满熟妇bbbbbb百度| 国产精品久久成人免费观看| 黑人糟蹋人妻hd中文字幕| 天天综合网日韩| 亚洲国产欧美91| www.亚洲天堂网| 一级网站在线观看| youjizz.com在线观看| 北条麻妃在线视频观看| 日韩video| 国产免费又粗又猛又爽| 日产精品久久久久久久蜜臀| 996这里只有精品| 日本一本在线视频| 6080国产精品| 欧美男女交配视频| 999这里有精品| 无码无遮挡又大又爽又黄的视频| 韩国中文字幕av| 亚洲另类第一页| 国产二级片在线观看| 爱情岛论坛成人| 欧美激情国产精品日韩| 国产精品视频网站在线观看| 图片区乱熟图片区亚洲| 中国老女人av| 亚欧在线免费观看| 香蕉视频999| 在线观看中文av| 国产精品无码专区av在线播放| 国产 日韩 亚洲 欧美| 欧美又粗又长又爽做受| 欧美少妇一区二区三区| 亚洲五月天综合| 免费网站在线观看视频| 亚洲制服在线观看| 欧美亚洲日本一区二区三区 | 日本一区二区黄色| 日韩网址在线观看| 日韩a级黄色片| 国产a级片免费观看| 欧美 日韩 国产精品| 久久久久久久久久一区| 青青视频在线播放| 丁香色欲久久久久久综合网| 黄色国产小视频| 久久午夜夜伦鲁鲁一区二区| 国产精品igao网网址不卡| 国产卡一卡二在线| 性欧美极品xxxx欧美一区二区| 午夜剧场在线免费观看| 男人插女人下面免费视频| 国产一区视频免费观看| 欧美日韩在线不卡视频| 国产v亚洲v天堂无码久久久| 人妻少妇被粗大爽9797pw| 大陆极品少妇内射aaaaaa| 国产裸体免费无遮挡| 无码内射中文字幕岛国片| 婷婷五月综合缴情在线视频| 91九色在线观看视频| 超碰超碰在线观看| 欧美 另类 交| 久久九九国产视频| 黑人巨大国产9丨视频| 中文字幕在线观看日 | 三级a在线观看| xxxx18hd亚洲hd捆绑| 欧美成人xxxxx| 国产aⅴ爽av久久久久| 丝袜人妻一区二区三区| 超碰10000| 在线播放免费视频| 欧美一区二区三区爽大粗免费| 粉嫩虎白女毛片人体| 美女少妇一区二区| www.中文字幕在线| 小说区视频区图片区| 中文字幕在线视频一区二区| 霍思燕三级露全乳照| 中文字幕久久av| 国产精品第12页| 成人性生生活性生交12| www.超碰com| av日韩一区二区三区| 黄色特一级视频| 国产精品h视频| 亚洲精品综合在线观看| 男女污污视频网站| 美女少妇一区二区| 欧美少妇性生活视频| 亚洲熟妇av一区二区三区| 成人午夜视频免费在线观看| 97视频在线免费播放| 亚洲国产精品三区| 成人区一区二区| 成年人视频网站免费| 26uuu成人| 国产精品无码免费专区午夜| 天天做天天躁天天躁| 欧美日韩第二页| 欧美精品久久96人妻无码| 日韩小视频在线播放| 91视频成人免费| 怡红院av亚洲一区二区三区h| 一区二区xxx| 免费拍拍拍网站| 久久久久xxxx| 亚洲高清在线免费观看| 超碰在线播放91| 粉色视频免费看| 精品久久久久av| 777av视频| 天天操天天爱天天爽| 99精品人妻少妇一区二区| 国产精品无码专区av在线播放| 国产九九九九九| 手机av在线网站| 欧美日韩精品区别| 五月天六月丁香| 国产裸体免费无遮挡| 在线看免费毛片| 久艹视频在线免费观看| 一二三在线视频| 久激情内射婷内射蜜桃| 四虎精品欧美一区二区免费| 狠狠干视频网站| 日韩国产精品毛片| 婷婷六月天在线| 午夜肉伦伦影院| 手机在线免费观看毛片| 国产福利影院在线观看| 小泽玛利亚视频在线观看| 水蜜桃在线免费观看| 91视频成人免费| 在线免费黄色网| 男女污污视频网站| 日本中文字幕亚洲| 性欧美1819| 欧美少妇性生活视频| 涩多多在线观看| 男女啪啪免费观看| 公共露出暴露狂另类av| 99精品视频在线看| 国产999免费视频| 青青视频在线播放| 992tv成人免费观看| 国产一级不卡毛片| 国产欧美综合一区| 91 在线视频观看| 精品视频在线观看一区| 国产日韩亚洲欧美在线| 国产精品亚洲天堂| 亚洲欧美日韩一级| 18禁男女爽爽爽午夜网站免费| 久久这里只有精品8| www.99r| 国产一二三区av| 国产成人无码a区在线观看视频| 国产成人精品视频免费看| 女女百合国产免费网站| 一区二区三区四区免费观看| 亚洲人成无码网站久久99热国产| 激情五月六月婷婷| 爽爽爽在线观看| 日韩视频一二三| 好色先生视频污| av日韩在线看| 国产高潮免费视频| 日本国产一级片| 国产毛片视频网站| 男的插女的下面视频| 无遮挡又爽又刺激的视频|