33.C++赋值运算符的重载
来源:互联网 发布:淘宝客的导购名称 编辑:程序博客网 时间:2024/05/18 01:19
//赋值运算符实例#include <iostream>#include <string.h>class Assignment{public: Assignment(char *s);//构造函数 Assignment& operator=(Assignment &x);//使用对象引用的重载赋值运算符 Assignment& operator=(char *s);//使用指针的重载赋值运算符 void display() { std::cout<<ptr<<std::endl; } ~Assignment() { if (ptr) { delete ptr; } }private: char *ptr; };//定义构造函数Assignment::Assignment(char *s){ ptr=new char(strlen(s)+1); strcpy(ptr, s);}//使用对象引用的重载赋值运算符Assignment& Assignment::operator=(Assignment &x){ if (ptr) { //释放ptr原来锁指的内存空间 delete ptr; } if (x.ptr) { ptr=new char[strlen(x.ptr)+1];//重新申请所指的内存空间 strcpy(ptr, x.ptr);//将对象x的字符串复制到申请的内存 } else ptr=0; return *this;//返回this所指的对象}//使用指针的重载赋值运算符Assignment& Assignment::operator=(char *s){ delete ptr; ptr=new char[strlen(s)+1]; strcpy(ptr, s); return *this;}int main(int argc, const char * argv[]){ Assignment a1("abcd"),a2("a1234"); a1.display(); a2.display(); a1=a2;//调用对象引用的重载赋值运算符 a1.display(); a2=(char*)"Think you"; a2.display(); return 0;}