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機 ...