33.C++赋值运算符的重载

//赋值运算符实例
#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;
}

你可能感兴趣的:(33.C++赋值运算符的重载)