第十二章 - 类和动态内存分配

一,自定义String

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

using namespace std;

class String{
private:
    char *m_data;
public:
    String();                              //默认构造函数
    String(const char *);                  //使用C格式的字符串初始化String
    String(const String &);                //拷贝构造函数
    ~String();                             //析构函数
    String & operator=(const String &);    //重载赋值运算符
    char & operator[](int);                //处理non-const String对象
    const char & operator[](int);          //处理const String对象
    friend ostream & operator << (ostream &, const String &);
    friend istream & operator >> (istream &, const String &);
    friend const String operator+(const String &, const String &);
};

//默认构造函数
String::String(){
    m_data = new char[1];
    if(m_data != NULL){
        *m_data = '\0';
    } else {
        //对m_data == NULL,进行处理
    }
}

//使用C格式的字符串初始化String
String::String(const char *str){
    if(str == NULL){
        m_data = new char[1];
        if(m_data != NULL){
            *m_data = '\0';
        } else {
            //对m_data == NULL,进行处理
        }
    } else {
        int length = strlen(str);
        m_data = new char[length + 1];
        if(m_data != NULL){
            strcpy(m_data, str);
        } else {
            //对m_data == NULL,进行处理
        }
    }
}

//拷贝构造函数
String::String(const String &str){
    int length = strlen(str.m_data);
    m_data = new char[length + 1];
    if(m_data != NULL){
        strcpy(m_data, str.m_data);
    } else {
        //对m_data == NULL,进行处理
    }
}

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

//重载赋值运算符
String & String::operator=(const String &str){
    if(this != &str){
        String temp(str);
        char *p = temp.m_data;
        temp.m_data = m_data;
        m_data = p;
    }
    return *this;
}

//处理non-const String对象
char & String::operator[](int index){
    return m_data[index];
}

//处理const String对象
const char & String::operator[](int index) const{
    return m_data[index];
}

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

istream & operator >> (istream &is, const String &st){
    is>>st.str;
    return is;
}

const String operator+(const String &str1, const String &str2){
    int length1 = strlen(str1.m_data);
    int length2 = strlen(str2.m_data);
    String str;
    str.m_data = new char[length1 + length2 + 1];
    if(str.m_data != NULL){
        strcpy(str.m_data, strcat(str1.m_data, str2.m_data));
    } else {
        //对m_data == NULL,进行处理
    }
    return str;
}

int main(){
    return 0;
}

猜你喜欢

转载自blog.csdn.net/cloud323/article/details/81043666