首先,C++是以C語言爲基礎的,而且徹底兼容C語言的特性。 學習C++語言,對於歷來沒有學習過面向對象的程序員來講,在學習C++語言時候,着重點學習C++語言面向對象的三大特性,這也是其餘面嚮對象語言的三大特性,原理都同樣,只是代碼實現不一樣而已。c++
C++面向對象的三大特性程序員
封裝,繼承,多態函數
1 namespace 命名空間
學習
C中的命名空間優化
在C語言中只有一個全局做用域spa
c語言中全部的全局標識符共享同一個做用域code
標識符之間可能發生衝突對象
C++blog
命名空間將全局做用域分紅不一樣的部分繼承
命名空間能夠相互嵌套
全局做用域也叫默認命名空間
C++命名空間的定義:
namespace name { }
C++命名空間的使用:
使用整個命名空間: using namespace name; 使用命名空間的變量:using name::variable;
結論:
C++標準爲了和C區別開,也爲了正確的使用命名空間,規定頭文件不使用後綴.h
2 "實用性"增長
//c 語言中的變量都必須在做用域開始的位置定義!
//C++中更增強調語言的」實用性「,全部的變量均可以在須要使用時候再定義。
3 register關鍵字加強
//register關鍵字,請求編譯器讓變量a直接放在寄存器裏面,速度快。
C語言中,沒法取得register變量的地址
C++語言中,C++編譯器有本身的優化方式,能夠取得register變量的地址。
並且現代的C++編譯器比較智能,即便在不使用register關鍵字,也會將頻繁使用的變量進行register優化。
4 變量檢測的加強
C語言中,重複定義多個同名的全局變量是合法的。例如:
int g_var; int g_var = 1;
可是在C++中,不容許定義多個同名的全局變量
C語言中的多個同名的全局變量,最終會被連接到全局數據區的同一個地址空間上。
5 struct 類型的增強
C語言中 struct定義了一組變量的集合,C編譯器並不認爲這是一種新的類型(注意)
所以用C語言中的struct類型定義變量時候,必須帶上struct關鍵字。
c++語言中,是一種新的類型聲明,而且能夠在struct裏面加上函數,默認的訪問權限是public。 在功能上,跟類類型差很少。
6 C++中的全部的變量和函數必須有類型
在C語言中,
int f();//表示返回值爲int,接受任意參的函數 int f(void);//表示返回值爲int的無參函數
在C++語言中,
int f(); int f(void); //以上兩行等價的,都表示函數返回值是int的無參函數
7 C++新增的Bool類型關鍵字
C++中bool 的值只可取 true和false
理論上bool只佔一個字節,多個bool變量在一塊兒,可能會佔一個字節,取決於編譯器實現。
true表明真值,編譯器內部用1表示,
false表明假值,編譯器內部用0表示,
C++編譯器會在賦值時,把非0值轉換爲true,0值轉換爲false
8 三目運算符在c和C++編譯器中的表現
C語言中,三目運算符返回的是變量的值,不能用做左值。
C++語言中,三目運算符返回的是變量自己,所以能夠用在程序任何地方。
注意:三目運算符可能返回的值中若是有一個是常量值,則不能做爲左值使用
當左值的條件:要有內存空間,其實C++編譯器是幫程序員取了一個地址而已。
int a = 20; int b = 30; *(a<b ?: &a, &b) - 30;