c 建構函式詳解

2021-09-24 01:35:50 字數 1812 閱讀 6228

#include

using namespace std;

class coordinate

// 一般建構函式

coordinate

(double x,

double y)

:c_x

(x),

c_y(y)

//列表初始化

// 一般建構函式可以有多個,建立物件時根據傳入的引數不同呼叫不同的建構函式

coordinate

(const coordinate& c)

// 等號運算子過載

coordinate& operator=

(const coordinate& rhs)

double

get_x()

double

get_y()

private:

double c_x;

double c_y;};

intmain()

c1 = (1, 2)

c2 = (0, 0)

c3 = (1, 2)

c4 = (0, 0)

c5 = (0, 0)

請按任意鍵繼續. . .

#include

using namespace std;

class test

// 拷貝建構函式

test

(const test& t)

// 析構函式

~test()

// 顯示函式

void

show()

private:

int t_a;};

// 全域性函式,傳入的是物件

void

fun(test c)

intmain()

creat: 1

copy

test

delete: 1

delete: 1

請按任意鍵繼續. . .

#include

#include

using namespace std;

class test ~

test()

private:

int x;

int y;

int* p;};

intmain()

上述程式崩潰。在使用t1複製t2時,進行的是淺拷貝,只是將成員的值進行賦值。此時,t1.p = t2.p, 即兩個指標指向了堆裡的同乙個空間。這樣,析構函式會被呼叫兩次,這就是錯誤出現的原因。此問題的解決方法是「深拷貝」。

#include

#include

using namespace std;

class test

test

(const test& t)

~test()

intget_x()

intget_y()

private:

int x;

int y;

int* p;};

intmain()

(0, 0)

(0, 0)

請按任意鍵繼續. . .

此時t1與t2的p各自指向一段記憶體空間,但他們指向的內容相同,這就是「深拷貝」。

C 建構函式詳解

c 類的建構函式詳解 一 建構函式是幹什麼的 class counter private 資料成員 int m value 該類物件被建立時,編譯系統物件分配記憶體空間,並自動呼叫該建構函式 由建構函式完成成員的初始化工作 eg counter c1 編譯系統為物件c1的每個資料成員 m value...

c 建構函式詳解

c 類的建構函式詳解 一 建構函式是幹什麼的 class counter private 資料成員 int m value 該類物件被建立時,編譯系統物件分配記憶體空間,並自動呼叫該建構函式 由建構函式完成成員的初始化工作 eg counter c1 編譯系統為物件c1的每個資料成員 m value...

C 建構函式詳解

c 建構函式的知識在各種c 教材上已有介紹,不過初學者往往不太注意觀察和總結其中各種建構函式的特點和用法,故在此我根據自己的c 程式設計經驗總結了一下c 中各種建構函式的特點,並附上例子,希望對初學者有所幫助。c 類的建構函式詳解 一 建構函式是幹什麼的 class counter private ...