以下幾種情況編譯會生成類成員函式情況如下:
#include
#include
#include
// 編譯器為我們實現了幾個類成員函式?
class
empty
;//empty e;
//empty b=e;
//empty d;
//empty b=d;
//empty f(b);
//empty* operator&(); //取址運算子
//const empty* operator&() const; //取址運算子(const版本)
//有預設建構函式、拷貝建構函式、析構函式、賦值語句、取址運算子、取址運算子(const版本)
// 編譯器為我們實現了幾個類成員函式?
class
anotherempty
:public empty
;//有預設建構函式、拷貝建構函式、析構函式、賦值語句、取址運算子、取址運算子(const版本)
//只是構造的時候會呼叫基類的建構函式
// 編譯器為我們實現了幾個類成員函式?
class
void};
//拷貝建構函式、析構函式、賦值語句、取址運算子、取址運算子(const版本),除了建構函式
// 編譯器為我們實現了幾個類成員函式?
class
notempty
private
:int m_value;};
//拷貝建構函式、析構函式、賦值語句、取址運算子、取址運算子(const版本),除了建構函式
//如果提供了自己的建構函式c++就不會實現預設建構函式
std::map<
int, notempty> m;m[1
]=notempty(10
);//出錯
//要求類必須有自身的預設建構函式,否則編譯報錯
//因為map會先查詢key=1,有則返回其值的引用;沒有,則預設插入乙個notempty,且用notempty的預設建構函式(這裡notempty沒有預設構造)
編譯器預設生成的函式
拷貝控制函式包括 拷貝建構函式 拷貝賦值函式 移動建構函式 移動賦值函式 析構函式。1.建構函式 如果我們沒有定義任何建構函式,編譯器會為我們生成乙個預設的建構函式。如果定義了,則沒有預設建構函式,即不能以class item來定義物件了。因此,不管有沒有定義建構函式,最好自己定義下預設建構函式。2...
C 中的空類,編譯器預設可以產生哪些成員函式
c 中建立乙個空類 class empty 缺省會生成4個函式,其函式的原型如下 public empty empty const empty rhs empty empty operator const empty rhs 說明 1 這些函式只有在需要呼叫的時候,編譯器才會生成。2 4個函式都是p...
C 編譯器會為類新增哪些成員函式
乙個空的class在c 編譯器處理過後就不再為空,編譯器會自動地為我們宣告一些member function,如果你寫 class empty 就相當於 class empty 這是網上流傳的答案,而且在侯捷翻譯的中文簡體 effective c 2nd 有介紹 條款45 弄清c 在幕後為你所寫 所...