C++实现string类

C++实现string类
1.写防卫式声明和结尾
#ifndef String
#define String

#endif
2.写class里的内容,函数可只写接口
class String{
    public:
        String(char *str = 0);
        String(const String &str);
        String& operator=(const String &str);
        ~String();   //big three:拷贝构造函数,拷贝赋值函数,析构函数。带指针的类需要写这三个函数!
        char *get_c_str() const { return m_data; }
    private:
        char* m_data; //指针而不是数组
};
3.写big three:拷贝构造函数,拷贝赋值函数,析构函数这三个函数
inline 
String::String(const char* cstr = 0){
    if(cstr){
        m_data = new char[strlen(cstr) + 1];
        strcpy(m_data, cstr);
    }
    else{
        m_data = new char[1];
        *m_data = '\0';
    }
}//构造函数

inline 
String::~String(){
    delete[] m_data;
}//析构函数

inline
String::String(const String& str){
    m_data = new char[strlen(str.m_data) + 1];
    strcpy(m_data, str.m_data);
}//拷贝构造函数

inline 
String& String::operator= (const String& str){
    if(&str == this){
        return *this;
    }//检测自我赋值
    delete[] m_data;
    m_data = new char[strlen(str.m_data) + 1];
    strcpy(m_data, str.m_data);
    return *this;
} //拷贝赋值函数,先清空,再分配空间,最后赋值。
4.至此,string这个类就完成啦
#ifndef _MYSTRING_
#define _MYSTRING_
#include<string.h>

class String{
    public:
        String(const char* cstr = 0);
        String(const String &str);
        String& operator=(const String& str);
        ~String();   //big three,拷贝构造函数,拷贝赋值函数,析构函数.
        char *get_c_str() const { return m_data; }
    private:
        char* m_data;
};

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

inline 
String::~String(){
    delete[] m_data;
}

inline
String::String(const String& str){
    m_data = new char[strlen(str.m_data) + 1];
    strcpy(m_data, str.m_data);
}

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

#endif
5.test代码
#include"string.h"
#include<iostream>

using namespace std;

ostream& operator<<(ostream& os, const String& str){
    os << str.get_c_str();
    return os;
}

int main(){
    String s1("Hello");
    cout << s1;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值