栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++实现string类

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 = '';
    }
}//构造函数

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

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 = '';
    }
}

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

using namespace std;

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

int main(){
    String s1("Hello");
    cout << s1;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/429875.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号