C++(一)初識C++

C++發展歷史

語言的發展是一個逐步遞進的過程,C++ 是直接從 C 語言發展過來的,而 C 語言是從 B 語言發展過來的,B 語言是 BCPL 的一個解釋性後代,BCPL 是 Basic CPL。其中最有趣的是 CPL 中 C 的由來,由於當時這個語言是劍橋大學和倫敦大學合作開發的,在倫敦的人員加入之前,C 表示劍橋,倫敦人員加入之後,C 表示 Combined 組合。還有一種非正式的說法,C 表示 Christopher,因爲 Christopher 是 CPL 背後的主要動力。

最初導致C++誕生的原因是在Bjarne博士等人試圖去分析UNIX的內核的時候,這項工作開始於1979年4月,當時由於沒有合適的工具能夠有效的分析由於內核分佈而造成的網絡流量,以及怎樣將內核模塊化。同年10月,Bjarne博士完成了一個可以運行的預處理程序,稱之爲Cpre,它爲C加上了類似Simula的類機制。在這個過程中,Bjarne博士開始思考是不是要開發一種新的語言,當時貝爾實驗室對這個想法很感興趣,就讓Bjarne博士等人組成一個開發小組,專門進行研究。

當時不是叫做C++,而是C with class,這是把它當作一種C語言的有效擴充。由於當時C語言在編程界居於老大的地位,要想發展一種新的語言,最強大的競爭對手就是C語言,所以當時有兩個問題最受關注:C++要在運行時間、代碼緊湊性和數據緊湊性方面能夠與C語言相媲美,但是還要儘量避免在語言應用領域的限制。在這種情況下,一個很自然的想法就是讓C++從C語言繼承過來,但是我們的Bjarne博士更具有先見之明,他爲了避免受到C語言的侷限性,參考了很多的語言,例如:從Simula繼承了類的概念,從Algol68繼承了運算符重載、引用以及在任何地方聲明變量的能力,從BCPL獲得了//註釋,從Ada得到了模板、名字空間,從Ada、Clu和ML取來了異常。

C幾乎是C++的一個子集,所以C語言支持的語法在C++基本都支持並需要使用,C++在C的基礎上又多了很多新的特性。

這裏寫圖片描述

C++關鍵詞

C++98/03關鍵字
這裏寫圖片描述

C++數據類型

這裏寫圖片描述

名字空間

名字空間域是隨標準C++而引入的。它相當於一個更加靈活的文件域(全局域),可以用花括號把文件的一部分括起來,並以關鍵字namespace開頭給他起一個名字:

namespace name1
{
    int a = 0;
}

namespace name2
{
    int a = 1;
}
name1::a = 3;
name2::a = 4;

名字空間域解決全局命名衝突的問題
標準C++庫中的所有組件都是在一個被稱爲std的名字空間中聲明和定義的。在採用標準C++的平臺上使用標準C++庫中的組件,只需要寫一個using指示符:using namespace std;
就可以直接使用C++ 庫中的所有成員。
或者std::成員 的方式也可以使用C++庫裏的成員

::是作用域解析符

namespace std//std是C++標準庫的名字空間
{
    //標準庫成員
}

缺省參數

//全缺省參數
int add1(int a = 0,int b = 0)
{
    return a + b;
}
//半缺省參數
int add2(int a,int b = 0)
{
    return a + b;
}
void test()
{
    add1();
    add1(1);
    add1(1,1);
    add2(2);
    add2(2,2);
}

沒有參數就按缺省的來,有參數,就用傳的參數

函數重載

函數重載的規則:
*函數名必須相同。
*參數列表必須不同(個數不同,類型不同,參數排列順序不同)
*函數的返回值可以相同也可以不同
*僅僅返回類型不同不足以成爲函數的重載

C++是如何做到重載的
C++代碼在編譯時會根據參數列表對函數進行重命名,例如void swap(int a,int b)會被重命名爲_swap_int_int.
void swap(float x,float y)會被重命名成_swap_float_float.
當發生函數調用的時候,編譯器會根據傳入的實參去逐個匹配。以選擇對應的函數,如果匹配失敗,編譯器就會報錯,這叫做重載決議

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章