C 類中的特殊成員函式示例詳解

2022-10-04 00:03:33 字數 1229 閱讀 6682

前言

c++類中有幾個特殊的非靜態成員函式,當使用者未定義這些函式時,編譯器將給出缺省實現。c++11前程式設計客棧有四個特殊函式,c++11引入移動語義特性,增加了兩個引數為右值的特殊函式。這六個函式分別是:

1、預設建構函式

預設建構函式程式設計客棧指不需要引數就能初始化的建構函式。包含無參和所有引數有預設值兩種型別的建構函式。

2、複製建構函式

複製建構函式指使用該類的物件作為引數的建構函式。可以有其他引數,但必須提供預設值。

3、複製賦值運算子

過載等號=,將該類的物件賦值給已定義物件。

4、析構函式

沒啥可說的。

5、移動建構函式

c++11新增,該類的右值物件為引數的建構函式,其餘同複製建構函式。

6、移動複製運算子

同複製賦值運算子,唯一不同是引數為右值。

看定義容易迷糊,上**就會很清晰:

#include

#include

class foo

// 複製建構函式

foo(const foo& foo)

// 複製賦值運算子

foo& operator=(const foo& foo)

// 移動建構函式

foo(foo&& foo)

// 移動賦值運算子

foo& operator=(foo&& foo)

};int main()

用g++或者clang編譯,加上-fno-elide-constructors -std=c++0x選項。執行程式輸出如下:

default constructor

copy constructor

copy assignment operator

move constructor

move assignment operator

結果是我們預期的。需要注意的是foo foo3 = foo1的形式會呼叫複製建構函式,不會呼叫複製賦值運算子。原因是foo foo3 = ***宣告和定義乙個新物件,而賦值是作用在已定義物件。移動賦值運算子同理。

c++11新增了=default和=delete函式修飾符,提示編譯器使用預設或者刪除預設的特殊函式。需要注意的是這兩個修飾符只能修飾上述特殊函式,使用者可以用其對特殊函式進行裁剪。乙個例子:

struct test ;

參考

總結本文標題: c++類中的特殊成員函式示例詳解

本文位址:

C 類的特殊成員函式

類的特殊成員函式 特殊成員函式的難點在於它們何時被呼叫,以及可能產生的一些問題。建構函式 每個類都有自己的建構函式,即使乙個建構函式都沒定義,編譯器也會自動生成預設建構函式。建構函式下面有細分的種類 建構函式 每個物件建立時,都會呼叫建構函式。如果物件是封閉類,那麼生成乙個物件時,先呼叫成員物件類的...

c 中的特殊成員函式

如果沒有提供任何建構函式,c 將建立預設建構函式。例如假設定義了乙個k類,但沒有提供任何建構函式,編譯器則提供下面的預設建構函式 k k 也就是說,編譯器將提供乙個沒有引數的建構函式,不接受任何引數,也不執行任何操作的建構函式。這是因為建立物件的時候總會呼叫建構函式。k k 建立乙個物件使用預設構造...

C 特殊成員詳解

目錄 1.const資料成員 const型別變數不可修改 唯讀模式 必須採用初始化引數列表的方式初始化。2.const成員函式 const寫在小括號的後面,常成員函式不能修改資料成員 唯讀 常成員函式與普通函式同時存在時,函式名相同時,普通物件有限呼叫普通函式,普通物件可以呼叫常成員函式。3.con...