1. 程式人生 > >物件的複製和賦值

物件的複製和賦值

物件的複製是在物件宣告時進行的操作,而賦值是在宣告之後的操作。一般而言,複製的語法為A a(b),A為類,b為已經定義的物件,a為複製b的物件;賦值的語法為A a;a = b;需要先宣告物件a,之後再對其進行賦值。

有一種特殊的情況,A a=b;雖然是使用了操作符=,但由於是在物件宣告時,進行定義,所以依然呼叫複製方法。

下面程式碼為物件的複製和賦值操作。

#include <iostream>
#include <string>

using namespace std;

class Dul_Ass
{	
	private:
		int x;
		string s;
	
	public:
		Dul_Ass (): x(1), s("abc") {};	
		Dul_Ass (int a, string c): x(a), s(c) {};
		
		//物件複製
		Dul_Ass(const Dul_Ass & src): x(src.x), s(src.s) {};
		
		//物件賦值
		Dul_Ass& operator = (const Dul_Ass &src);
		
		//輸出元素
		void print_val() const;	
};

//物件複製
Dul_Ass& Dul_Ass::operator = (const Dul_Ass& rhs)
{
	//如果是自賦值,直接返回函式本身
	if(this == &rhs)
		return *this;
	else
	{
		x = rhs.x;
		s = rhs.s;
		return *this;
	}
}

void Dul_Ass::print_val(void) const
{
	cout << "x = " << x << "; s = " << s << endl;
}

int main(void)
{
	Dul_Ass a(2, "def");
	Dul_Ass b(a);
	Dul_Ass c;
	c = a;	
	
	b.print_val();
	c.print_val();
	
	return 0;
}

物件複製:

Dul_Ass(const Dul_Ass & src): x(src.x), s(src.s) {};

不需要返回值,函式的輸入引數為物件。

物件賦值:

Dul_Ass& operator = (const Dul_Ass &src);

相當於定義了一個“=”操作符,函式的返回型別為一個物件型別,並且還可以是引用返回(類內的函式可以,普通的函式呼叫不可以返回引用值)。為了減小字元值的資源浪費,進行了

//如果是自賦值,直接返回函式本身
    if(this == &rhs)
        return *this;

this指標指向呼叫該函式的物件。

 

一般而言,建立類時會預設建立複製,賦值方法,除非類方法中建構函式使用了指標,一般是不需要寫複製,賦值方法的。