C 基礎 this指標及類的六個成員函式

2021-08-18 17:53:30 字數 2738 閱讀 7498

【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 初始化列表比函式內初始化更高效 對於自定義型別,在初始化時系統會自動生成初始化列表,即系統會先走一遍初始化列表,然後在呼...