C和C 的區別

2021-10-02 16:36:20 字數 4012 閱讀 8368

c和c++的區別:

目錄

0,列舉

定義: 使用

1,擴充套件:雙冒號作用域運算子

2,對全域性變數檢測增強

3,對函式的檢測增強

4,型別檢測增強

5,結構體struct相關

細說new與malloc的10點區別:

設計思想上:

c是面向過程的結構化程式設計語言,c++是物件導向的語言

語法上:

c++具有封裝,繼承,多型三種特徵

c++相比c,增加了許多態別安全的功能,比如強制型別轉換

c++支援正規化變成,比如模板類,函式模板等

c++模板:

(1)可用來建立動態增長和減小的資料結構 (2)它是型別無關的,因此具有很高的可復用性。 (3)它在編譯時而不是執行時檢查資料型別,保證了型別安全 (4)它是平台無關的,可移植性 (5)可用於基本資料型別

以下部分內容摘自菜鳥教程 c++ 列舉型別詳解 :

c++提供了另外一種建立符號常量的方式,這種方式可以代替const。

它還允許定義新型別,但必須按嚴格的限制進行。

使用enum的句法與使用結構相似。

列舉型別(enumeration)是 c++ 中的一種派生資料型別,它是由使用者定義的若干列舉常量的集合。

定義格式:列舉型別的定義格式為:

enum 《型別名》 ;
舉例:

enum spectrum;
說明:

列舉常量代表了列舉型別變數可能取到的值,每個列舉常量代表了乙個整數值,這個整數就是該列舉常量在常量表中的序號值。

可以在定義列舉型別時為部分或全部列舉常量指定整數值,在指定值之前的列舉常量仍按預設方式取值,而指定值之後的列舉常量按依次加1的原則取值。 各列舉常量的值可以重複

舉例:

enum week ;

//列舉常量sun,mon,tue,wed,thu,fri,sat的值分別為7、1、2、3、4、5、6。

有賦值要求的列舉常量會是特定的值,其他值的賦值方式還是預設形式。

列舉常量只能以識別符號形式表示,而不能是整型、字元型等文字常量。例如,以下定義非法:

enum letter_set ; //列舉常量不能是字元常量

enum year_set; //列舉常量不能是整型常量

可以一起定義,或者分開定義:

enum  weekday1, weekday2;

enum days;

dasy days1;

列舉變數的值只能取列舉常量表中所列的值,就是整型數的乙個子集。

列舉變數占用記憶體的大小與整型數相同

列舉變數只能參與賦值關係運算以及輸出操作,參與運算時用其本身的整數值。例如,設有定義:

enum color_set1  color1, color2;

enum color_set2 color3, color4;

color3=red;           //將列舉常量值賦給列舉變數

color4=color3; //相同型別的列舉變數賦值,color4的值為red

int i=color3; //將列舉變數賦給整型變數,i的值為1

int j=green; //將列舉常量賦給整型變數,j的值為0

列舉變數可以直接輸出,但不能直接輸入

不能直接將常量賦給列舉變數

不同型別的列舉變數之間不能相互賦值

列舉變數的輸入輸出一般都採用switch語句將其轉換為字元或字串;

列舉型別資料的其他處理也往往應用switch語句,以保證程式的合法性和可讀性

同樣:列舉變數是全域性變數的情況下,列舉值的預設值是0,不是列舉的第乙個值。其他情況,其值是不定的,而且不限定於所列出的列舉值。

使用::跨過同名區域性變數,直接訪問全域性變數

int atk = 200;

mainwindow::mainwindow(qwidget *parent) :

qmainwindow(parent),

ui(new ui::mainwindow)

//雙冒號作用域運算子

void mainwindow::test()

以上**在c中不會報錯,在c++中會報錯。

c中存在自動轉換,在c++中需要程式設計師手動轉換。

在c++中,可以在結構體中增加函式

定義結構體物件也稍有不同

在c中,結構體只能定義變數,不能定義函式,可以定義函式指標

在c++結構體中,能定義函式,能夠定義private、public、protected,可以從別的類繼承,也可以被繼承,可以有虛函式

c中宣告結構體變數是struct struct_name a;//a是變數名 

而c++中直接使用struct_name a即可。

在使用關鍵字typedef則二者一樣。

6,c++對const的增強

const修飾全域性變數,無法被修改,在c/c++中一樣,非常穩定。

但是對於區域性變數,二者還是有區別的,c中可以通過指標修改區域性變數的值,所以const在c中不穩定

在c++中,const很穩定

c++中,const修飾區域性變數時,不會分配記憶體

int main(void)

直接將變數放入符號表中,因為不會分配記憶體,所以無法修改。

可以看到,以上**在c中,a的值會被修改,但是在c++中,a的值無法被修改

**中修改的是p的值,不是a的值,a本身還在符號表中。

只要是初始化的時候分配了記憶體,不放在符號表裡面,即可使用指標進行修改

用變數初始化const變數時,可以使用指標修改

//全域性變數

//用變數初始化const變數

int a = 10;

const int b = a;//這個時候會分配記憶體

int * pp = (int *)&b;

*pp = 20;

qdebug()<

鏈結性的變化

C 和C的區別

c 與c語言的關係 1 c 繼承了所有的c特性 2 c 在c的基礎上提供了更多更好的語法和特性 3 c 的設計目標是執行效率和開發效率的統一 c 對c語言的加強 1 c 中所有的變數都可以再需要使用時再定義 如 for迴圈等中需要的變數 3 c中可以定義多個同名的全域性變數 c 不可以 4 cons...

C和C 的區別

這裡主要討論的是區別,而不是c 中有的,而c語言中沒有的東西。c 比c語言多了很多東西,最重要的當屬類 物件導向程式設計 和模板 泛型程式設計 基於泛型程式設計還引出了元程式設計 metaprogramming 等等。這裡討 共部分但是不一樣的部分 函式過載是c 支援的,c不支援 c 的函式過載在類...

C 和C的區別

c c 的聯絡 c c 區別 小知識點補充擴充套件 free 而new開闢物件陣列用的是new size 釋放的的時候是 delete 5 返回值問題,malloc開闢成功返回void 需要強轉,失敗返回null,new 成功返回物件指標,失敗丟擲異常 這就可能會提到c 的new handler機 ...