Simple implementation of string

Simple implementation of string using C++ classes

Data is stored using pointers, so it involves deep and shallow copying.
To be able to achieve object = string, object = object function, it is necessary to overload the = operator. Write two overloaded functions. Also write the copy constructor. Pay attention to the problem of deep and shallow copying.

#include <bits/stdc++.h>

using namespace std;

class myString {
    
    
    private:
        char* ch;
    public:
        // 构造函数
        myString (const char* p = nullptr) {
    
     // 默认参数是nullptr
            if (p == nullptr) {
    
    
                ch = nullptr;
            } else {
    
    
                ch = new char[1 + strlen(p)];
                strcpy_s(ch, 1 + strlen(p), p);
            }
        }
        // 复制构造函数
        myString (const myString& temp) {
    
    
            if (temp.ch == nullptr) {
    
    
                ch = nullptr;
            } else {
    
    
                ch = new char[1 + strlen(temp.ch)];
                strcpy_s(ch, 1 + strlen(temp.ch), temp.ch);
            }
        }
        // 析构函数
        ~myString () {
    
    
            if (ch != nullptr) delete []ch;
        }
        // 重载 = 运算符,实现对象 = 字符串
        myString& operator=(const char* p) {
    
      // 此处不可以是const char* & p。
            if (ch == p) return *this;
            if (ch != nullptr) delete []ch;
            ch = new char[1 + strlen(p)];
            strcpy_s(ch, 1 + strlen(p), p);
        }
        // 重载 = 运算符,实现对象 = 对象
        myString& operator=(const myString& temp) {
    
    
            if (this == &temp) {
    
    
                return *this;
            } else {
    
    
                if (ch != nullptr) {
    
    
                    delete []ch;
                } 
                if (temp.ch == nullptr) {
    
    
                    ch = nullptr;
                } else {
    
    
                    ch = new char[1 + strlen(temp.ch)];
                    strcpy_s(ch, 1 + strlen(temp.ch), temp.ch);
                }
                return *this;
            }
        }
        // 打印成员函数
        void show() const {
    
    
            printf("%s\n", ch);
        }
};

int main() 
{
    
    
    myString str1; // 调用构造函数时,使用默认的参数 nullptr
    myString str2("hello, world!"); // 调用构造函数时,给出了初始化参数
    
    myString str3(str2); // 调用的是复制构造函数

    myString str4;
    str4 = "hahaha"; // 调用重载 = 运算符函数,实现 对象 = 字符串
    str4 = str2; // 调用重载 = 运算符函数,实现 对象 = 对象
    

    return 0;
}

Guess you like

Origin blog.csdn.net/weixin_44321570/article/details/124962020