本文共 1084 字,大约阅读时间需要 3 分钟。
类型 & 类名 :: operator= ( const 类名 & ) ;
案例:完善Name类,支持=号操作。
具体看如下代码:
#define _CRT_SECURE_NO_WARNINGS #includeusing namespace std;class Name{public: Name(const char* myp) { m_len = strlen(myp); m_p = (char*)malloc(m_len+1); strcpy(m_p,myp); } //Name obj2=obj1 这是浅拷贝 //解决方案,手工编写深拷贝构造函数 Name(const Name& obj1) { cout << "拷贝构造函数" << endl; m_len = obj1.m_len; m_p = (char*)malloc(m_len+1); strcpy(m_p,obj1.m_p); } Name& operator=(Name& obj1) { cout << "重载了" << endl; //先释放旧的内存 if (this->m_p != NULL) { free(m_p); m_p = NULL; m_len = 0; } this->m_len = obj1.m_len; this->m_p = new char[m_len + 1]; //把obj1赋值 strcpy(m_p,obj1.m_p); return *this; } ~Name() { if (m_p != NULL) { free(m_p); m_p = NULL; m_len = 0; } }protected:private: char* m_p; int m_len;};//对象析构的时候,出现coredumpvoid objplaymain(){ Name obj1("abcdefg"); Name obj2 = obj1; //调用的是拷贝构造函数,因为这里有个初始化的操作 Name obj3("obj3"); obj3 = obj1; //调用的是等号重载 obj1 = obj2 = obj3;}void main(){ objplaymain(); cout << "hello..." << endl; system("pause"); return;}
转载地址:http://gezmi.baihongyu.com/