等号操作符重载

来源:互联网 发布:求呱呱软件 编辑:程序博客网 时间:2024/05/24 06:22

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

等号操作符重载实例:

#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;}