📜  如何在C ++中创建具有基本功能的自定义String类(1)

📅  最后修改于: 2023-12-03 15:08:51.854000             🧑  作者: Mango

如何在C++中创建具有基本功能的自定义String类

在C++中,string(字符串)类是一个非常常用的数据类型。但是如果你想要自己创建一个基本功能的自定义String类该怎么办呢?本文将会介绍如何在C++中创建这样一个类。

步骤
1. 创建一个头文件

创建一个头文件,并在其中声明你自己的String类。在这个类中,包含以下几个基本的成员变量和函数:

class MyString {
  private:
    char* data;
    size_t length;
  public:
    MyString();
    MyString(const char*);
    MyString(const MyString&);
    ~MyString();
    MyString& operator=(const MyString&);
    char operator[](size_t) const;
    size_t size() const;
    const char* c_str() const;
};

在这个类中,我们需要一个char*类型的指针来存储自定义字符串的内容。另外,我们还需要一个size_t类型的变量来存储字符串的长度。这个类中还包含了一些常用的函数,如拷贝构造函数、析构函数、赋值运算符重载函数等。

2. 实现构造函数和析构函数

我们来实现一下构造函数和析构函数。在构造函数中,我们需要对data指针进行初始化,并对字符串长度进行赋值:

MyString::MyString() : data(nullptr), length(0) {}
MyString::MyString(const char* str) : data(new char[strlen(str) + 1]), length(strlen(str)) {
    strcpy(data, str);
}
MyString::MyString(const MyString& str) : data(new char[str.length + 1]), length(str.length) {
    strcpy(data, str.data);
}

MyString::~MyString() {
    delete[] data;
}

在这个实现中,我们使用了用来分配内存的new运算符和释放内存的delete运算符。

3. 实现赋值运算符重载函数和operator[]运算符重载函数

接下来,我们来实现赋值运算符重载函数和operator[]运算符重载函数。这两个函数是自定义字符串类的重要成员函数。

MyString& MyString::operator=(const MyString& str) {
    if (this != &str) {
        delete[] data;
        data = new char[str.length + 1];
        length = str.length;
        strcpy(data, str.data);
    }
    return *this;
}

char MyString::operator[](size_t index) const {
    return data[index];
}
4. 实现sizec_str函数

接下来,我们来实现size函数和c_str函数。它们分别用来获取字符串的长度和字符数组的指针:

size_t MyString::size() const {
    return length;
}

const char* MyString::c_str() const {
    return data;
}
5. 测试

我们现在已经完成了自定义String类的实现,并且可以进行一些简单的测试。

#include <iostream>
#include "mystring.h"

using namespace std;

int main() {
  MyString str1("Hello World");
  MyString str2 = str1;
  MyString str3;
  str3 = str2;

  cout << str1.c_str() << endl;
  cout << str2.c_str() << endl;
  cout << str3.c_str() << endl;

  cout << "Size of the string str1 is " << str1.size() << endl;
  cout << "Character at index 0 of str1 is " << str1[0] << endl;

  return 0;
}

输出结果:

Hello World
Hello World
Hello World
Size of the string str1 is 11
Character at index 0 of str1 is H
结论

通过上述步骤,我们已经成功地创建了一个具有基本功能的自定义String类。虽然这个类不如标准库中的string重要,但是了解如何创建自己的String类仍然是一项有趣和有用的技能。