拷貝建構函式首先是乙個建構函式,它呼叫的時候產生乙個物件,是通過引數傳進來的那個物件來初始化,產生的物件。 operator=();是把乙個物件賦值給乙個原有的物件,所以如果原來的物件中有記憶體分配要先把記憶體釋放掉,而且還要檢查一下兩個物件是不是同乙個物件,如果是的話就不做任何操作。
還要注意的是拷貝建構函式是建構函式,不返回值
而賦值函式需要返回乙個物件自身的引用,以便賦值之後的操作 鏈式操作
你肯定知道這個:
int a, b;
b = 7;
func( a = b ); // 把i賦值後傳給函式func( int )
同理:
cmyclass obj1, obj2;
obj1.initialize();
func2( obj1 = obj2 ); //如果沒有返回引用,是不能把值傳給func2的
注: cmyclass & cmyclass:: operator = ( cmyclass & other )
if( this == &other )
return *this;
// 賦值操作...
return *this
呼叫拷貝建構函式的生成物件的方式是,用乙個以有的物件的樣子去構造乙個新的各屬性值一樣的物件。如有類定義如下:
在c++語言裡,
string s2(s1);
string s3 = s1;
只是語法形式的不同,意義是一樣的,都是定義加初始化,都呼叫拷貝建構函式。
#include
#include
using namespace std;
class a
namelist();//預設建構函式
namelist(namelist&);//拷貝建構函式
namelist& operator=(char *p );
namelist& operator=( namelist& );
void display()
~ namelist ()
};namelist::namelist(namelist& a)//定義拷貝建構函式
namelist& namelist::operator=( char *p)//
//第乙個過載賦值運算子,完成用常量給物件賦值
namelist& namelist::operator=( namelist& a)
//第二個過載賦值運算子,完成類物件之間的賦值
return *this;
} int main()
拷貝建構函式的作用
拷貝建構函式首先是乙個建構函式,它呼叫的時候產生乙個物件,是通過引數傳進來的那個物件來初始化,產生的物件。operator 是把乙個物件賦值給乙個原有的物件,所以如果原來的物件中有記憶體分配要先把記憶體釋放掉,而且還要檢查一下兩個物件是不是同乙個物件,如果是的話就不做任何操作。還要注意的是拷貝建構函...
拷貝建構函式,預設拷貝建構函式
拷貝建構函式,預設拷貝建構函式 1.c 的預設拷貝建構函式,從深度拷貝和淺拷貝說起 c 類的預設拷貝建構函式的弊端 c 類的中有兩個特殊的建構函式,1 無參建構函式,2 拷貝建構函式。它們的特殊之處在於 1 當類中沒有定義任何建構函式時,編譯器會預設提供乙個無參建構函式且其函式體為空 2 當類中沒有...
建構函式 拷貝建構函式
建構函式可以分為三類 1 不帶引數的建構函式 在函式體中對資料成員賦初值,這種方式使該類的每乙個物件都得到同一組初值 2 帶引數的建構函式 如果使用者希望對不同的物件賦不同的初值,可以採用帶引數的建構函式。在呼叫不同物件的建構函式時從外面將不同的資料傳遞給建構函式,以實現初始化 3 複製建構函式 建...