l C++作用域運算符 :
“ ::”主要有2種應用方式。
其一,類與類的成員之間
聲明一個類A,類A里聲明了一個成員函數void f( ),但沒有在類的聲明里給出f的定義,
那么在類外定義f時,就要寫成void A::f( ),表示這個f( )函數是類A的成員函數。
其二,作用域。
簡單分為:全局作用域,局部作用域,語句作用域
作用域優先級:范圍越小優先級越高
作用域運算符:"::"
如果希望在局部變量的作用域內使用同名的全局變量,可以在該變量前加上"::","::"稱為作用域運算符.
### 構造函數:
構造函數是成員函數的一種,名字 與 類 的名字相同,可以有參數,但是不能有返回值(void也不行)。
其作用是對 對象進行初始化,比如給成員對象賦初始值。
若定義類 時沒有寫構造函數,則編譯器自動生成一個默認的無參的構造函數。
(默認構造函數沒有參數,不做任何操作)。
對象生成時,構造函數自動被調用,對象一旦生成,就再也不能在其上執行構造函數。
一個類可以有多個構造函數。
# 為什么需要構造函數?
其執行了必要的初始化操作,不必專門再寫初始化函數,亦不必擔心忘記書寫初始化函數。
什么是構造函數?通俗的講,在類中,函數名 和 類名 相同的函數稱為構造函數。
它的作用是在建立一個對象時,作某些初始化的工作(例如對數據賦予初值),
(僅僅負責創建對象而不做任何賦值操作..疑問?)在一個類中可以有多個構造函數。
如果一個都沒有,編譯器將為該類產生一個默認的構造函數。
構造函數惟一的語法限制是 它不能指定 返回類型,甚至void 也不行。
不帶參數的構造函數 一般形式為
類名 對象名( ) { 函數體 }
帶參數的構造函數:不帶參數的構造函數,只能以固定不變的值初始化對象。
帶參數構造函數的初始化要靈活的多,通過傳遞給 構造函數 的參數,可以賦予對象 不同的初始值。
一般形式為:構造函數名(形參表);
創建對象使用時:類名 對象名(實參表);
構造函數參數的初始值:構造函數的參數可以有缺省值。
當定義對象時,如果不給出參數,就自動把相應的缺省參數值賦給對象。一般形式為:
構造函數名(參數=缺省值,參數=缺省值,……);析構函數:
當一個類的對象離開作用域時,析構函數將被調用(系統自動調用)。
析構函數的名字和類名一樣,不過要在前面加上 ~ 。對一個類來說,只能允許一個析構函數,析構函數不能有參數,
并且也沒有返回值。析構函數的作用是完成一個清理工作,如釋放從堆中分配的內存。
一個類中可以有多個構造函數,但析構函數只能有一個。對象被析構的順序,與其建立時的順序相反,
即后構造的對象先析構。
析構函數(destructor) 與構造函數相反,當對象脫離其作用域時(例如對象所在的函數已調用完畢),
系統自動執行析構函數。析構函數往往用來做“清理善后”工作(例如在建立對象時用new開辟了一片內存空間,
應在退出前在析構函數中用delete釋放)
新聞熱點
疑難解答