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 也是呼叫...