C++ string类函数实现

关键点:

1. 除了构造函数和析构函数,还要有拷贝构造函数,和重载=操作符

2. 构造函数要new一个字符串,存放结束符

3. 构造函数new时记得 lenght+1

4. 析构函数要使用 delete []

5. 重载=操作时,记得先delete后new

6. 重载=操作时,记得要判断两个字符串是不是同一个,是的话直接返回

 

 class String

{

   public:

          String(const char *str=NULL); //构造函数

          String(const String &other); //拷贝构造函数

          ~String(void); //析构函数

          String& operator=(const String &other); //等号操作符重载

   private:

          char *m_data; //指针

}; 

String::~String()

{

    delete [] m_data; //析构函数,释放地址空间

}

String::String(const char *str)

{

    if (str==NULL)//当初始化串不存在的时候,为m_data申请一个空间存放'\0';

     {

        m_data=new char[1];

        *m_data='\0';

     }

    else//当初始化串存在的时候,为m_data申请同样大小的空间存放该串;

     {

        int length=strlen(str);

        m_data=new char[length+1];

        strcpy(m_data,str);

     }

}

String::String(const String &other)//拷贝构造函数,功能与构造函数类似。

{

    int length=strlen(other.m_data);

    m_data=new [length+1];

    strcpy(m_data,other.m_data);

}

String& String::operator =(const String &other) 

{

    if (this==&other)//当地址相同时,直接返回;

        return *this; 

    delete [] m_data;//当地址不相同时,删除原来申请的空间,重新开始构造;

    int length= strlen (other.m_data);

    m_data=new [length+1];

    strcpy(m_data,other.m_data);

    return *this; 

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值