天天看点

赋值运算符函

赋值运算符函

#include <iostream>
#include <cstring> 
using namespace std;

class String
{
    public:
        String(const char *s=nullptr);//自定义构造函数 
        String(const String &s1);//拷贝构造哈数 
        String &operator=(const String &s);//赋值构造函数 
        void print();
    private:
        char *data;
};

String::String(const char *s)
{
    if(s==NULL)
    {
        data=new char[1];
        data[0]='\0';
    }
    else
    {
        data=new char[strlen(s)+1];
        strcpy(data,s);
    }
}

String::String(const String &s1)
{    
    data=new char[strlen(s1.data)+1];
    strcpy(data,s1.data);
    //cout<<" copy."<<endl;
}

String &String::operator=(const String &s)
{
    if(&s==this)//防止自己赋值 
        return *this;
    
    delete []data;
    data=new char[strlen(s.data)+1];
    strcpy(data,s.data);
    //cout<<" operator=."<<endl;
}

void String::print() 
{
    cout<<data<<endl;
}

int main()
{
    String s("hello word.");//自定义构造函数 
    String s2=s;//拷贝构造函数 
    String s3(s2);//s3需要用s2初始化,调用拷贝构造函数 
    s2=s3;//s2,s3已存在。调用赋值构造函数 ;当一个类的对象向该类的另一个对象赋值时,就会用到该类的赋值函数。首先该对象要存在 
    s2.print();
    s3.print();
    return 0;
}