1. 程式人生 > >C++學習筆記 (一) ---- C++初步

C++學習筆記 (一) ---- C++初步

1、C++面向物件是對C語言的升級,,結構體是變數的合集,而類是變數與函式的合集;

結構體定義的變數還是稱作變數,類定義的變數稱作為物件

面向物件程式設計在程式碼執行效率上絕對沒有任何優勢,它的主要目的是方便程式設計師組織和管理程式碼,快速梳理程式設計思路,帶來程式設計思想上的革新。

名稱空間:namespace,可以解決在同一專案中,不同程式設計師定義了相同變數而產生變數重複定義的問題

格式:

namespace NAME{

//變數,函式,類。。。

}

使用時要注意其所在的名稱空間,域解析操作符 ::

還有,using可以在程式碼開頭宣告名稱空間,這樣就不用再通過域解析操作符來使用變數。

輸入、輸出資料流:cin、cout,使用前提是需要包含標頭檔案 iostream 。相較於C語言,無需像 scanf 和 printf 那樣給出格式控制字串。

bool關鍵字:true 、false

C和C++中全域性 const 變數的作用域相同,都是當前檔案,不同的是它們的可見範圍:C語言中 const 全域性變數的可見範圍是整個程式,在其他檔案中使用 extern 聲明後就可以使用;而C++中 const 全域性變數的可見範圍僅限於當前檔案,在其他檔案中不可見,所以它可以定義在標頭檔案中,多次引入後也不會出錯。

記憶體操作,new 、delete ,和C語言相似 ( malloc 、free)。

C語言:

int *p = (int*) malloc( sizeof(int) * 10 ); //分配10個int型的記憶體空間

free(p); //釋放記憶體

C++:

int *p = new int; //分配1個int型的記憶體空間

delete p; //釋放記憶體

int *p = new int[10]; //分配10個int型的記憶體空間

delete[] p;

行內函數:inline ,用來消除函式呼叫時產生的時空開銷,一般是把函式體很小的函式宣告為行內函數。

巨集定義是可以帶引數的,形式上和函式很像,但是巨集僅僅是字串替換,不是按值傳遞,要是用帶引數的巨集進行復雜運算時,需要定義複雜的字串表示式。所以可以使用行內函數替換帶引數的巨集。

和巨集定義一樣,行內函數也是可以定義在標頭檔案中,不用加 static 關鍵字,並且標頭檔案被多次 #include 也不會引發錯誤,而其他非行內函數是不可以定義在標頭檔案中的。

行內函數是一種 " 用於實現 " 的關鍵字,行內函數不應該有宣告,而是直接將函式定義放在宣告函式的位置上。多檔案程式設計時,應將行內函數定義在標頭檔案裡。

帶預設引數的函式:在定義函式的時候可以給引數一個預設值,這樣在呼叫函式時要是沒有給形參賦值,就直接使用預設值。預設引數可以指定使用常量,也可以指定表示式。

float d = 10.8;

void func(int n, float b=d+2.9, char c='@'){

cout<<n<<", "<<b<<", "<<c<<endl;

}

規定:預設引數只能在形參列表的最後,因為傳參時是從左往右依次匹配的。

預設傳參既可以在宣告中,也可以在函式定義裡,不過不能同時進行預設引數的設定。建議在宣告中進行設定,這樣可以方便對預設引數值進行更改。

函式過載:允許多個函式名稱相同,引數列表可以不同 ( 引數型別、引數個數、引數順序 )

函式過載中的二義性錯誤,就是說在編譯的時候,編譯器不知道該呼叫哪一個函式。

一般以下原因會造成二義性錯誤:

a)形參一致,僅僅是函式返回值或形參名稱不同;

b)過載函式有一個形參有預設引數;

c)過載函式形參在同位置的型別分別是傳值或者傳引用;