21xrx.com
2024-11-05 18:43:42 Tuesday
登录
文章检索 我的文章 写文章
C++ 自定义字符串类
2023-06-24 02:48:36 深夜i     --     --
C++ 自定义 字符串类

C++是一种面向对象的编程语言,其标准库提供了一种称为string的字符串类。然而,对于一些具有特殊要求的开发者来说,string类不一定能够满足他们的需求。这时,自定义字符串类就变得非常重要。自定义字符串类除了可以满足特殊需求之外,还可以加强程序的可维护性和可扩展性。

自定义字符串类是一种用户定义的类,其内部存储字符串的方式和string类有所不同。它可以提供更多的操作和更高的性能,因为它可以基于具体的需求进行优化。在C++中,可以使用构造函数和运算符重载来实现自定义字符串类。下面是一个简单的自定义字符串类的实现:


#include <cstring>

class MyString {

private:

  char* m_string = nullptr;

  int m_length = 0;

public:

  MyString(const char* string) {

    m_length = strlen(string);

    m_string = new char[m_length + 1];

    strcpy_s(m_string, m_length + 1, string);

  }

  MyString(const MyString& other) : m_length(other.m_length) {

    m_string = new char[m_length + 1];

    strcpy_s(m_string, m_length + 1, other.m_string);

  }

  ~MyString() {

    delete[] m_string;

  }

  char operator[](int index) const {

    return m_string[index];

  }

  bool operator==(const MyString& other) const {

    return strcmp(m_string, other.m_string) == 0;

  }

  bool operator!=(const MyString& other) const {

    return !(*this == other);

  }

  MyString& operator=(const MyString& other) {

    if (this != &other) {

      delete[] m_string;

      m_length = other.m_length;

      m_string = new char[m_length + 1];

      strcpy_s(m_string, m_length + 1, other.m_string);

    }

    return *this;

  }

  friend std::ostream& operator<<(std::ostream& stream, const MyString& string);

  friend std::istream& operator>>(std::istream& stream, MyString& string);

};

std::ostream& operator<<(std::ostream& stream, const MyString& string) {

  stream << string.m_string;

  return stream;

}

std::istream& operator>>(std::istream& stream, MyString& string) {

  char buffer[1024];

  stream >> buffer;

  string = MyString(buffer);

  return stream;

}

在上面的代码中,首先定义了一个MyString类,并声明了它的构造函数、拷贝构造函数、析构函数、下标运算符、相等运算符、不等运算符和赋值运算符。这些运算符都根据具体的需求进行了重载。然后还声明了两个友元函数,分别是输出运算符和输入运算符。最后,实现了这两个友元函数。

这个自定义字符串类仅仅是一个简单的示例,实际使用时可能需要加入更多的操作和安全保障。但是,通过这个示例,可以看到C++在自定义类方面的强大功能,让开发者可以基于自己的需求灵活地定义和实现自己的类。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复