C 類和物件(二)

2021-08-21 13:27:08 字數 1889 閱讀 7601

隱含的this指標

1、每個成員函式都有乙個指標形參,它的名字是固定的,稱為this指標,this指標是隱式的。(建構函式比較特殊,沒有這個隱含this形參)

2、編譯器會對成員函式進行處理,在物件呼叫成員函式時,物件位址作實參傳遞給成員函式的第乙個形參this指標。

3、this指標是成員函式隱含指標形參,是編譯器自己處理的,我們不能在成員函式的形參中新增this指標的引數定義,也不能在呼叫時顯示傳遞物件的位址給this指標。

定義乙個日期類

類的預設成員函式1、建構函式

2、拷貝建構函式

3、析構函式

4、複製操作符過載

5、取位址操作符過載

6、const修飾的取位址操作符過載

下面依次來介紹一下

1、建構函式

成員變數為私有的,要對它們進行初始化,必須用乙個共有成員函式來進行。同時這個函式應該有且僅在定義物件時自動執行一次,這時呼叫的函式稱為建構函式(construtor)。

建構函式時特殊的成員函式,其特徵如下:

1、函式名與類名相同。

2、無返回值。

3、物件構造(物件例項化)時系統自動呼叫對應的建構函式。

4、建構函式可以過載。

5、建構函式可以在類中定義,也可以在類外定義。

6、如果類定義中沒有給出建構函式,則c++編譯器自動產生乙個預設的建構函式,但只要我們定義了乙個建構函式,系統就不會自動生成預設的建構函式。

7、無參的建構函式和全預設值得建構函式都認為是預設建構函式,並且預設的建構函式只能有乙個。

2、拷貝建構函式

建立物件時使用同類物件來進行初始化,這時所用的建構函式稱為拷貝建構函式(copy construtor),拷貝建構函式時特殊的建構函式。

特徵:

1、拷貝建構函式其實是乙個建構函式的過載。

2、拷貝建構函式的引數必須使用引用傳參,使用傳值方式會引發無窮遞迴呼叫。

3、若未顯示定義,系統會預設預設的拷貝建構函式。預設的拷貝建構函式會依次拷貝類成員進行初始化。

3、析構函式

當乙個物件的生命週末結束時,c++編譯系統會自動呼叫乙個成員函式,這個特殊的成員函式即析構函式(destructor)。

建構函式時特殊的成員函式,其特徵如下:

1、析構函式在類名加上字元~。

2、析構函式無引數無返回值。

3、乙個類有且只有乙個析構函式。若未顯示定義,系統會自動生成預設的析構函式。

4、物件宣告週期結束時,c++編譯系統自動呼叫析構函式。

5、注意析構函式體內並不是刪除物件,而是做一些清理工作。

運算子過載

為了增強程式的可讀性,c++支援運算子過載

運算子過載特徵:

1、operator合法的運算子構成函式名。

2、過載運算子以後,不能改變運算子的優先順序/結合性/運算元個數。

5個c++不能過載的運算子: .*/::/sizeof/?:/.

4、賦值運算子過載

拷貝建構函式時建立的物件,使用乙個已有物件來初始化這個準備建立的物件。

複製運算子的過載是對乙個已存在的物件進行拷貝賦值。

C 類和物件(二)

類和物件 類的物件如何引用私有資料成員 1 通過公有函式為私有成員賦值 class test void printxy void void main void 2 利用指標訪問私有資料成員 class test void getxy int px,int py 提取x,y值 void printxy...

C 學習 類和物件(二)

先來看下面 include using namespace std class person int main 執行結果 zyc localhost lession class a.out jack 20 123456 rose 21 654321 為什麼呼叫同樣的函式,但是結果卻不一樣呢?原因就在...

C 類和物件 類和物件

c 中物件的型別稱為類,類代表了某一批物件的共性和特徵,類是物件的抽象,而物件是類的具體例項,類是抽象的,不占用記憶體,而物件是具體的,占用 儲存空間,這點很重要,讀者需要牢記。類是使用者自己指定的型別,如果程式中要用到類型別,必須自己根據需要進行宣告,或者使用別人已設計好的類,c 標準本身並不提供...