021 建構函式寫了,就必須用

2021-08-30 15:26:00 字數 1095 閱讀 6475

/*

1)當類中沒有定義任何乙個建構函式時,c++編譯器會提供預設無參建構函式和預設拷貝建構函式

2)當類中定義了拷貝建構函式時,c++編譯器不會提供無引數建構函式

3) 當類中定義了任意的非拷貝建構函式(即:當類中提供了有參建構函式或無參建構函式),

c++編譯器不會提供預設無參建構函式

4 )預設拷貝建構函式成員變數簡單賦值

總結:只要你寫了建構函式,那麼你必須用。

*/

第一種情況

#if 1

class test

protected:

private:

int a;

int b;

};void test()

#endif

第2種情況

#if 1

class test

void printt()

protected:

private:

int a;

int b;

};void test()

#endif

第3種情況

#if 1

class test

void printt()

protected:

private:

int a;

int b;

};void test()

#endif

第4種情況

當類中定義了拷貝建構函式時,c++編譯器不會提供無引數建構函式

定義拷貝建構函式必須同時定義建構函式

今天測試static cast 時發現乙個類如果只有拷貝建構函式是不能通過編譯的,下面給個例子 class a public a const a ref cout error c2512 a 沒有合適的預設建構函式可用 解決方法 給a新增合適的建構函式。下面給出新增了建構函式的 並測試了static...

什麼時候必須重寫拷貝建構函式

1 這裡有個簡單的規則 如果你需要定義乙個非空的析構函式,那麼,通常情況下你也需要定義乙個拷貝建構函式。2 有乙個原則 一般來說你在類中進行了new操作,你就需要析構函式,在你需要析構函式的類中,一般需要加上挎貝建構函式和賦值函式。3 拷貝建構函式,是一種特殊的建構函式,它由編譯器呼叫來完成一些基於...

拷貝建構函式的引數型別必須是引用

在c 中,建構函式,拷貝建構函式,析構函式和賦值函式 賦值運算子過載 是最基本不過的需要掌握的知識。但是如果我問你 拷貝建構函式的引數為什麼必須使用引用型別?這個問題,你會怎麼回答?或許你會回答為了減少一次記憶體拷貝?很慚愧的是,我的第一感覺也是這麼回答。不過還好,我思索一下以後,發現這個答案是不對...