美文网首页
编写类string的构造函数、析构函数和赋值函数

编写类string的构造函数、析构函数和赋值函数

作者: 小小唯大大胖 | 来源:发表于2018-03-27 21:57 被阅读0次

    已知类String的原型为:
    class String
    {
    public:
    String(const char *str =NULL); //普通构造函数
    String(const String&s); //拷贝构造函数
    ~String(); //析构函数
    String & operator =(const String &s); //赋值函数
    private:
    char *m_data; //用于保存字符串
    };
    答:
    String::String(const char *str)
    {
    cout<<"普通构造函数"<<endl;
    if(str==NULL) //如果str为空,存空字符串
    {
    m_String=new char[1]; //分配一个字节
    *m_String='\0'; //将之赋值为字符串结束符
    }
    else
    {
    m_String=new char[strlen(str)+1]; //分配空间容纳str内容
    strcpy(m_String,str); //赋值str到私有成员
    }
    }
    String::String(const String &other)
    {
    cout<<"复制构造函数"<<endl;
    m_String=new char[strlen(other.m_String)+1];
    strcpy(m_String,other.m_String);
    }
    String::~String(void)
    {
    cout<<"析构函数"<<endl;
    if(m_String!=NULL) //如果m_String 不为NULL,释放堆内存
    {
    delete [] m_String; //释放后置为NULL
    m_String=NULL;
    }
    }
    String & String::operator =(const String &other)
    {
    cout<<"赋值函数"<<endl;
    if(this==&other) //如果对象与other是同一个对象
    {
    return *this; //直接返回本身
    }
    delete [] m_String;
    m_String=new char[strlen(other.m_String)+1];
    strcpy(m_String,other.m_String);
    return *this;
    }
    int main()
    {
    String a("hello"); //调用普通构造函数
    String b("word"); //调用普通构造函数
    String c(a); //调用复制构造函数
    c=b; //调用赋值函数
    return 0;
    }

    相关文章

      网友评论

          本文标题:编写类string的构造函数、析构函数和赋值函数

          本文链接:https://www.haomeiwen.com/subject/rtkecftx.html