C 中的空類,編譯器預設可以產生哪些成員函式

2021-08-21 19:47:31 字數 906 閱讀 3400

c++中建立乙個空類:

class empty {};

缺省會生成4個函式,其函式的原型如下:

public: empty()

empty(const empty& rhs)  

~empty()  

empty& operator=(const empty& rhs)

說明:1)這些函式只有在需要呼叫的時候,編譯器才會生成。

2) 4個函式都是public的。

3) 4個函式都是inline的(即函式定義在類的定義中的函式)。

4) 如果你顯式的宣告了這些函式中的任何乙個函式,那麼編譯器將不再生成預設的函式。

比如,當遇到下列語句時,函式會被編譯器生成:

empty e1; //預設建構函式 

//物件銷毀時,析構函式

empty e2(e1); //拷貝建構函式

e2 = e1; //賦值運算子

public: empty* operator&()

const empty* operator&() const

這兩個函式是確實存在的,正如下面的**可以正常工作:

#include

class empty {};

int main(int argc, char** argv)

乙個容易被忽略的問題:自定義的拷貝建構函式不僅會覆蓋預設的拷貝建構函式,也會覆蓋預設的建構函式。下面的**是編譯不過的,使用者必須再顯式的定義乙個無參的建構函式。

class empty  

//拷貝建構函式};

int main(int argc, char** argv)

C 空類預設產生的成員

一共有6個 empty 預設建構函式 empty const empty 預設拷貝建構函式 empty 預設析構函式 empty operator const empty 預設賦值運算子 empty operator 取址運算子 const empty operator const 取址運算子 co...

C 中的空類預設產生的類成員函式

對於乙個c 的空類 比如empty 1 class empty 2 雖然empty類定義中沒有任何成員,但為了進行一些預設的操作,編譯器會加入以下一些成員函式,這些成員函式使得類的物件擁有一些通用的功能 1 預設建構函式和複製建構函式。他們被用於類的物件的構造過程。2 析構函式。它被用於類的物件的析...

C 編譯器生成的預設函式

c 編譯器生成的預設函式 話題引入 物件的賦值與複製是如何進行的?他們的區別是什麼?如果乙個空的自定義型別能否執行這些操作?物件賦值 通過 運算子過載 user a 10 b b a 物件複製 呼叫拷貝建構函式 user b user a b 或者 user a b 相當於user a b 也是呼叫...