【this指標】:
1. 乙個物件的this指標並不是物件本身的一部分,不會影響sizeof(物件)的結果。this作用域
是在類內部,當在類的非靜態成員函式中訪問類的非靜態成員的時候,編譯器
會自動將物件本身的位址作為乙個隱含引數傳遞
給函式。
也就是說,即使你沒有寫上this指標,編譯器在編譯的時候也是加上this的,它作為非靜態成員函式的隱含形參
,對各成員的訪問均通過this進行。
2.this指標是類的乙個自動生成、自動隱藏的私有成員,它存在於類的非靜態成員函
數中,指向被呼叫函式
所在的物件。全域性僅有乙個this指標,當乙個物件被建立時,this指標就存放指向物件資料的首位址。
3.如何使用this指標:
(1):在類的非靜態成員
函式中返回類物件本身的時候,直接使用 return *this;
(2):當引數與成員變數
名相同時使用this指標,如this->n = n (不能寫成n = n)。
4 .只有在類的非靜態成員函式中才能使用this指標,其他函式都不可以。
【建構函式】:
建構函式是為物件分配空間,進行初始化。它是一種特殊的成員函式,具有以下特點
1.函式名與類名相同。
2.無返回值。
3.構造物件的時候系統會自動呼叫建構函式。
4.可以過載。
5.可以在類中定義,也可以在類外定義。
6.如果類中沒有給出建構函式,編譯器會自動產生乙個預設的建構函式,如果類中有構
造函式,編譯器就不會產生預設建構函式。
7.全預設的建構函式和無參的建構函式只能有乙個,否則呼叫的時候就會產生衝突。
8.沒有this指標。因為建構函式才是建立物件的,沒有建立物件就不會有物件的首位址。
建構函式,說來就是給成員變數進行初始化。而初始化卻有兩種方法:
初始化列表、建構函式函式體內賦值。
【析構函式】:
析構函式是一種特殊的成員函式,具有以下特點:
1. 析構函式函式名是在類名加上字元~。
2. 無引數無返回值(但有this指標)。
3. 乙個類有且只有乙個析構函式,所以肯定不能過載。若未顯示定義,系統會自動生成預設的析構函式
4. 物件生命週期結束時,c++編譯系統系統自動呼叫析構函式。
5. 注意析構函式體內並不是刪除物件,而是做一些清理工作。(比如我們在建構函式
中動態開闢過一段空間,函式結束後需要釋放,而系統自動生成的析構函式才不管內
存釋放呢,所以需要人為地寫出析構函式)
【拷貝析構函式】:
只有單個形參,而且該形參是對本類型別物件的引用(常用const修飾),這樣的建構函式稱為拷貝建構函式。拷貝建構函式是特殊的建構函式,建立物件時使用已存在的同類物件來進行初始化,由編譯器自動呼叫
特徵:1. 拷貝建構函式其實是乙個建構函式的過載。建構函式的性質拷貝構造均滿足
2. 拷貝建構函式的引數必須使用引用傳參,指標也不行,使用傳值方式會引發無窮遞迴呼叫。(把形參複製到實參會呼叫拷貝構造,如果進行值傳遞,就會在建構函式內呼叫建構函式。)這裡傳引用,並不是為了減少記憶體拷貝。
3. 若未顯示定義,系統會預設預設的拷貝建構函式。預設的拷貝建構函式會依次對拷貝類成員進行初始化。
建構函式使用的場景:
1>顯式或隱式地用同型別的乙個物件來初始化另外乙個物件。如:date a; date b(a);
2>作為實參傳遞給乙個函式。
3>在函式體內返回乙個物件時,也會呼叫返回值型別的拷貝建構函式.
舉例:
int main()
上邊是用d1建立乙個d2,系統會給出缺省的拷貝建構函式,並且該函式的引數是乙個常
引用,我們想象為什麼必須是引用呢,如果不是又會發生什麼。
如果不是引用,形參是實參的乙份臨時拷貝,由於兩者都是物件,此時就會呼叫自己的
拷貝建構函式,陷入無限遞迴中.......
【運算子過載】:
運算子過載拷貝建構函式是建立的物件,使用乙個已有物件來初始化這個準備建立的物件。
賦值運算子的過載是對乙個已存在的物件進行拷貝賦值。
date& operator=(const date& d) //賦值運算子的過載 >> 返回引用,防止連續賦值
return *this;
}
【取位址操作符過載】:
person * operator&()
【const修飾的取位址操作符過載】:
const person * operator&() const
函式後邊的const表明在函式體中不能改變物件的成員,當然可以改變mutable變數。函式的返回值是指向常物件的指標。
c 類的預設六個成員函式
c 中預設的六個成員函式分別是 建構函式,拷貝建構函式,賦值操作符過載函式,析構函式,取位址操作符過載函式,const修飾的取位址操作符過載函式。一 建構函式 1,建構函式是乙個特殊的成員函式,名字與類同名,建立類型別物件時由編譯器自動呼叫,保證每個資料成員都有乙個合適的初始值,並且在物件的生命週期...
類和物件及類中的六個預設的函式
一 物件導向的三大特徵 1 封裝 2 繼承 3 多型 二 類和物件的區別 答 類是抽象的,物件是具體的,所以類不占用記憶體,而物件占用記憶體。三 類和struct的區別 1 struct中預設為public 2 類中預設為private 四 生成物件的2步 1 申請記憶體 2 使用建構函式進行初始化...
C 預設的六個函式
一 建構函式 1.建構函式 cmystring 1 函式名與類名相同 無返回值 物件構造時系統自動呼叫相應的建構函式 建構函式可以過載 可以在類內或者類外定義 指定作用域即可 2 初始化列表比函式內初始化更高效 對於自定義型別,在初始化時系統會自動生成初始化列表,即系統會先走一遍初始化列表,然後在呼...