Cpp拷貝建構函式發生的時刻(還存在疑問)

2022-05-16 12:36:12 字數 1247 閱讀 2281

如果乙個建構函式的第乙個引數是自身類型別的引用,且任何額外引數都有預設值,則此建構函式是拷貝建構函式

class

numbered

numbered(

const numbered& inputone)

intmysn;

};

拷貝建構函式發生以下情況:

#include #include 

#include

using

namespace

std;

class

numbered

numbered(

const numbered& inputone)

intmysn;

};void

f(numbered s)

intmain()

執行結果:

從watch視窗可以看到:b.mysn比a.mysn多1,這是由於拷貝建構函式造成的

從輸出中可以看出,f(a)輸出了1,這也是由於拷貝建構函式造成的。

關於拷貝建構函式發生的四種情況:

numbered b=a;//拷貝建構函式

f(a);//將a賦給函式f過程中,發生了拷貝構造

//從乙個返回型別為非引用的函式返回乙個物件--類似第二點

//用花括號列表(c++11)初始化乙個陣列中的物件或乙個聚合類中的成員

第二點,第三點最容易忽略,應該注意。

以上是拷貝建構函式的基本內容,下面用乙個比較複雜的例子來分析拷貝建構函式,建構函式等的區別

#include #include 

using

namespace

std;

class

a a(

inti) : x(i)

a(const a &a)

a &operator=(const a &a)

~a()

private

:

//a(const a &a)

intx;

};a get_a()

intmain()

執行結果

關於第1點和第4點,為何沒有拷貝建構函式這個操作??

這個地方不是很明白?

也請高手指教。我如果搞清楚了,也會及時更新

CPP 建構函式 成員初始化表 拷貝建構函式

類物件的構造順序是這樣的 1.分配記憶體,呼叫建構函式時,隱式 顯示的初始化各資料成員 建構函式列表的初始化方式不是按照列表的的順序,而是按照變數宣告的順序同時初始化顯隱資料成員 2.進入建構函式後在建構函式中執行一般賦值與計算。class a void main 執行順序為 初始化x 0 初始化y...

拷貝建構函式 淺拷貝 深拷貝建構函式的應用

一 基本概念 建構函式 屬於特殊的類成員函式,為資料成員初始化和分配記憶體。拷貝建構函式 屬於特殊的建構函式,同乙個類的a物件構造和初始化b物件。二 什麼時候用拷貝建構函式?在c 中,拷貝建構函式將會適用在下面三種情況。1 乙個物件以值傳遞的方式傳入函式。2 乙個物件以值傳遞的方式從函式返回。3 乙...

自定義拷貝建構函式 預設的拷貝建構函式

自定義拷貝建構函式 類名 類名 const 類名 物件名 拷貝建構函式的函式體 利用下述語句呼叫拷貝建構函式 rectangle p2 p1 include using namespace std class rectangle public rectangle int len,int wid le...