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