对象的复制和赋值

对象的复制是在对象声明时进行的操作,而赋值是在声明之后的操作。一般而言,复制的语法为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指针指向调用该函数的对象。

一般而言,创建类时会默认创建复制,赋值方法,除非类方法中构造函数使用了指针,一般是不需要写复制,赋值方法的。

猜你喜欢

转载自blog.csdn.net/makesifriend/article/details/84777889
今日推荐