标签:
应当注意以下几点:
1.是否将返回值类型声明为该类型的引用,否则无法做连续赋值
2.是否将传入的参数声明为常量引用,如果不是常量,不能保证不会修改传入的参数,如果不是引用,会调用一次拷贝构造函数影响代码的效率。
3.是否判断赋值的两个操作数是同一个实例。
4.是否删除被赋值对象的内存,否则会产生内存泄露。
程序代码如下:
#include<iostream> #include<cstring> using namespace std; class Mystring { public: Mystring &operator=(const Mystring &str); Mystring(char *pdata=NULL)//带默认值的构造函数 { data=pdata; } Mystring(const Mystring &str)//拷贝构造函数 { data=str.data; } ~Mystring() //析构函数 { } void show() { cout<<data<<endl; } private: char* data; }; Mystring &Mystring::operator=(const Mystring &str) { if(&str!=this)//如果&str==this则不必赋值 { delete data;//先释放原有空间 data=NULL; data=new char[strlen(str.data)+1];//为指针初始化空间 strcpy(data,str.data);//赋值 } return *this; } int main() { Mystring str1("hello"),str2;//声明两个类对象 str1.show(); str2=str1;//调用自定义赋值方法 str2.show(); str1=str1;//自己给自己赋值 str1.show(); return 0; }
标签:
原文地址:http://www.cnblogs.com/runninglzw/p/4469683.html