c語言和c 的區別及預設引數的使用

2021-08-18 15:17:06 字數 3239 閱讀 5168

我們都知道,c語言是面向過程的語言,c++是基於物件導向的語言,所以在學習c++之前,我們要先來理解面向過程和物件導向的區別,以下是網上查閱資料和大神講解所羅列出來的簡單總結:

面向過程:

就是思考到事物發展的每一步,細如髮絲,考慮到任何一種可能發生的情況,一步步的執行,判斷,直至事物的結束。即分析出解決問題所需要的步驟,然後用函式把這些步驟乙個乙個實現,使用的時候乙個乙個呼叫函式即可。

這種程式設計方式的核心問題是資料結構和演算法的開發和優化。

物件導向:

就是把事情分解成不同的物件,建立物件的目的不是為了某乙個步驟,而是為了描述某個事物在整個解決問題的步驟中的行為。 

其主要思想是基於抽象資料型別的(abstract data type, adt):在結構化程式設計過程中,人們發現把某種資料結構和用於操縱它的各種操作以某種模組化方式繫結到一起會非常方便,使用這種方式進行程式設計時資料結構的介面是固定的。

即將某一類事物的共同屬性進行抽象,將其所有的屬性,行為按功能集合;

例項講解:

例如設計乙個象棋:面向過程的思路就是首先分析問題的步驟:

1.開始遊戲;

2.黑子先走;

3.繪製棋盤畫面;

4.判斷輸贏;

5.白子走;

6.繪製棋盤;

7.判斷輸贏;

8.返回到步驟2;

9.輸出最後的結果;

就這樣一步步的實現,問題就解決了;

而物件導向則是從另外乙個思路來設計解決問題:

1.玩家系統:黑白abcd都是玩家,所以屬性,步驟功能一樣;

2.繪製棋盤系統;

3.規則系統:決定哪個先走,判斷輸贏等操作;

可以看出物件導向是以功能來劃分,而不是步驟,黑子落棋后通知白棋棋盤發生變化,繪製棋盤系統就開始把變化繪製出來,規則系統則判定結果;贏了則返回,否則由白字繼續走;

如果要加乙個悔棋功能,面向過程則需要改動很多地方,黑子撤回棋,棋盤變化,然後載繪製,再判斷,可能很多要變化;隨著功能的越來越多,系統無法應付功能需求的規則的複雜而膨脹,最終導致奔潰;但是物件導向只需要得到悔棋命令後,繪製棋盤系統將棋盤重新繪製,呼叫規則系統判定即可,減少了大的改動;保證了物件導向程式的可擴充套件性;

又例如:對人這類這種高階動物:

如果物件導向:你只需要吃飯,跑步,睡覺幾個命令即可;

面向過程:做飯,拿筷子,夾菜,夾飯,嚼,咽、、、一步步的寫相應的函式,乙個乙個呼叫實現功能;順序的向下做;

但是:

物件是由乙個個過程組合起來的;具有封裝性;所以他需要很大的空間。

至此,我們了解了面向過程和物件導向的區別,現在我們來認識c語言和c++的區別。

(1)關鍵字:

c99標準下 ---有32個關鍵字

c++98標準下 ---有63個關鍵字

關鍵字詳情請看我的部落格:

(2)原始檔:

在c語言時,原始檔字尾為『 .c 』 ; 而c++原始檔字尾為『 .cpp 』;在建立原始檔不加字尾時,預設為cpp。
(3)變數定義:

c語言中必須在**最前面進行定義,再使用。

c++則可以一邊定義,一邊使用。

(4)函式:

1>返回值:

c語言中,可以不指定函式返回值型別,若不指出,則預設返回int型別。 

例:funtest()

c++中,如果函式沒有返回值,則必須給定為 void

例:void funtest()

2>引數列表:

c語言函式中若沒有指定引數列表時,預設可以接收任意多個引數 。

例:funtest();

funtest(10);

funtest(10,20);

c++函式體中若沒有引數,則不能接收任何引數。

因此,c++支援帶預設值的語法—-函式的預設引數:

預設引數:在宣告或者定義函式時為函式的引數指定乙個預設值。在呼叫函式時,若沒有指定實參則使用預設值,否則適用指定實參。

例:

void test(int bytesize= 100)

int main ()

①:在呼叫函式時;若沒有指定實參,則使用該預設值,且在函式呼叫前不是在函式體裡面給定;而是以引數傳過去

預設引數分為兩種:全預設和半預設。

全預設引數:函式每乙個引數都帶有預設值 。

例:

void funtest(int a=10 ,int b=20;int c=30)

半預設引數:函式一部分引數帶有預設值 。

例:

void funtest(int a ,int b;int c=30)

注意:

1:引數給預設值只能從右往左給定

例:

void funtest(int a ,int b;int c=30)*可以

void funtest(int a =10,int b;int c)*不行

void funtest(int a =10,int b;int c=30)*不行

2:預設引數不能同時在函式宣告和定義中–預設引數放在函式宣告中比較好

3:預設值必須是常量或者全域性變數

4:c語言不支援預設引數

此外:

①:在呼叫函式時,有實參使用實參,且從左邊開始傳實參

例:

void funtest(int a=10 ,int b=20;int c=30)

int main()

②半預設中,函式呼叫時每個引數必須都給定值才能編譯通過

例:

void funtest(int a ,int b;int c=30)

int main()

C語言和C 的區別

c和c 的關係 就像是win98跟winxp的關係。c 是在c的基礎上增加了新的理論,玩出了新的花樣。所以叫c加加。c和c 的區別 c是乙個結構化語言,它的重點在於演算法和資料結構。c程式的設計首要考慮的是如何通過乙個過程,對輸入 或環境條件 進行運算處理得到輸出 或實現過程 事務 控制 c 首要考...

C語言和C 的區別

c 是c發展來的!c 是物件導向的語言,而c是結構化的語言!c的所有 在c 上都能應用,而c 的 在c上不能應用!c 是功能更強大的c!c語言與vc 的區別有很多 1,全新的程式程式思維,c語言是面向過程的,而vc 是物件導向的。2,c語言有標準的函式庫,它們鬆散的,只是把功能相同的函式放在乙個標頭...

C語言和C 的區別

1.字尾不同 2.關鍵字不同 c語言 c99有32個關鍵字 c c 98有63個關鍵字 3.c 面向過程 c 基於物件導向 面向過程與物件導向的區別?1 面向過程 c語言 eat 蛋炒飯 把所有要做的放在一起,無法做到飯與菜的分離,如果想改變菜會造成浪費 舉個例子 開車走在c中這麼想的,先分為幾步 ...