从String类看写C++ class需要注意的地方

 

 

#include <iostream>
#include <string.h>

using namespace std;

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

    String(const String & other)
    {
        if(&other != this)
        {
            //delete [] m_data; //¹¹Ô캯ÊýÖв»ÐèÒªdelete momory:w
            m_data = new char[strlen(other.m_data) + 1];
            strcpy(m_data, other.m_data);
        }
    }

    ~String()
    {
        delete [] m_data;
    }

    String& operator=(const String & other)
    {
        if(&other != this)
        {
            delete [] m_data;
            m_data = new char[strlen(other.m_data) + 1];
            strcpy(m_data, other.m_data);
        }
        return *this;

    }
    friend String operator+(const String &s1, const String &s2);
    friend inline ostream & operator << (ostream & os, String &str);

};

String operator+(const String &s1, const String &s2)
{
    String temp;
    delete [] temp.m_data;  // temp.data Êǽöº¬¡®\0¡¯µÄ×Ö·û´® 
    temp.m_data = new char[strlen(s1.m_data) + strlen(s2.m_data) +1];
    strcpy(temp.m_data, s1.m_data);
    strcat(temp.m_data, s2.m_data);
    return temp;
}

ostream & operator << (ostream & os, String &str)
{
    os  << str.m_data << endl;
    return os;
}

int main()
{
    String str1("abc");
    cout << str1;

    String str2(str1);
    cout << str2;

    String str3;
    cout << str2;
    str3 = str2;

    String str4("def");

    String str5;
    str5 = str3 + str4;
    cout << str5;
}

 

转载于:https://www.cnblogs.com/diegodu/p/4616120.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值