建構函式 拷貝函式 賦值建構函式

2021-06-09 11:25:17 字數 1127 閱讀 2971

#ifndef _sample_h_

#define _sample_h_

#include

#include

struct qq

int qqnum;

std::string qqpassword; };

//以下a,b,c,d分別為:

//a: 沒有實現拷貝建構函式和賦值建構函式,所以會自動生成預設的拷貝建構函式和賦值建構函式

//b: 與a相同,但資料成員存在堆分配情況,這樣預設的拷貝建構函式只會拷貝指標而不會拷貝指標所指向的物件

//c: 實現了拷貝建構函式和賦值建構函式

//d: 與c相同,但存在堆分配情況,因此也必須深拷貝

//什麼是深拷貝,什麼是淺拷貝,自己去查下

//如果不自己去實現拷貝建構函式和賦值建構函式,那麼預設就是淺拷貝。淺拷貝在類中存在指標(比如給指標new物件,即堆分配過程)時,是危險的

//因為只拷貝了指標,而不會去拷貝指標所new的物件,這樣當源物件被析構時,你拷貝的指標就會指向乙個已被釋放了的記憶體

struct ta

//struct和class的區別就是:struct所有的成員都是public的,其餘一樣

~ta() qq

tqq;

//注意,這是變數是在棧上分配記憶體的 };

struct tb

~tb()

//堆分配的記憶體一定要自己釋放

qq*pqq;

//注意,只定義了乙個指標。建構函式給這個指標在堆上分配了乙個物件,並把物件的位址賦給了這個指標 };

class tc

tc( const tc& otherc )

//拷貝建構函式的形式必須這樣定義

~tc()

tc& operator = ( const tc& otherc )

//賦值建構函式實際上就是過載"="等號操作符

private: qq

tqq; };

class td

td( const td& otherd )

~td()

td& operator = ( const td& otherd )

qq* pqq; };

#endif

建構函式 拷貝建構函式 賦值建構函式

class和struct很大乙個區別在於,c除了成員的訪問控制許可權,struct中的成員預設是public,而class中的field預設是private class還有乙個special的地方是它有建構函式 constructor。建構函式是class中的一員,和成員變數 其他成員函式一起構成乙...

拷貝建構函式 賦值函式

1.編寫類string的建構函式 析構函式和賦值函式。已知類string的原型為 class string 編寫string的上述四個函式 1 string的析構函式 string string void 2 string的建構函式 string string const char str else...

拷貝建構函式與賦值建構函式

include stdafx.h include include using namespace std class a a a a 過載拷貝函式 a int id,char t name a char name a operator a a 注意 此處一定要返回物件的引用,否則返回後其值立即消失!...