等号操作符重载

当是涉及到深拷贝是,一种解决方式就是自己写构造函数处理深拷贝,另一种方式就是等号操作符重载

等号操作符重载实例:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
/*单目运算符重载*/
class eqPtor{
	
private:
	char *str;
	int str_length;
public:
	
	eqPtor(char* m_str, int m_length)
	{
		this->str_length = m_length;
		this->str = new char[str_length+1];
		strcpy(this->str, m_str);
	}
	eqPtor(eqPtor &opp)
	{
		this->str_length =opp.str_length;
		this->str = new char[str_length + 1];
		strcpy(this->str, opp.str);
	}

	/*等号操作符重载*/
#if 0    /*等号操作符重载方式1*/
	void operator=(eqPtor &opp1)
	{
		/*首先判断当指针是否分配内存,如果是则先释放后分配*/
		if (this->str != NULL)
		{
			delete this->str;
			this->str_length = 0;
		}
		this->str_length = opp1.str_length;
		this->str = new char[str_length + 1];
		strcpy(this->str, opp1.str);
	}
#endif 
	/*等号操作符重载方式2*/
	eqPtor operator=(eqPtor &opp1)
	{
		/*首先判断当指针是否分配内存,如果是则先释放后分配*/
		if (this->str != NULL)
		{
			delete this->str;
			this->str_length = 0;
		}
		this->str_length = opp1.str_length;
		this->str = new char[str_length + 1];
		strcpy(this->str, opp1.str);
		return *this;
	}




	void print()
	{
		cout << "    :" << this->str << endl;
	}
	~eqPtor()
	{
		if (this->str != NULL)
		{
			delete this->str;
			this->str_length = 0;
		}
	}
	
};

int main()
{
	{
		
		eqPtor opp1("libin", sizeof("libin"));
		eqPtor opp2("yiyierer", sizeof("yiyierer"));
		eqPtor opp3("busanbusi", sizeof("busanbusi"));
		//eqPtor opp2=opp1;
		opp1 = opp2;//这样是调用等号操作符,由于这里没有对等好操作符进行重载,所以如果之际使用就会出现错误
		//opp1 = opp2=opp3   这种运算方式用等号操作符重载方式一不可行 应为等号操作符是从有往左结合的,所,opp2=opp3的运算结果是void ,相当于opp1=void不可行
		opp1 = opp2 = opp3;/*这里将等号操作修改以后就可以使用这种操作*/
		opp1.print();
	}
	system("pause");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值