C++string类简单实现 原创 C++开发 2022年8月10日 11:04 夏至未至 870 当前内容 2603 字,在路上,马上到,马上到 ### 目录 [TOC] ### 实现说明 仅实现 `string` 类最基础的几个类成员,这也是手写 `string` 类的标准写法。 ### 源码 头文件: #pragma once #include using namespace std; class String { public: // 默认构造函数 String(); // 有参构造函数 String(const char* source); // 复制构造函数 String(const String& s); // 赋值构造函数 String& operator=(const String& s); // 析构函数 ~String(); private: char* m_data; //指向字符串数据 }; 源文件: #include "String.h" String::String() { // 无参构造,需要注意给成员变量一个初始值 m_data = new char[1]; *m_data = '\0'; cout << "调用无参构造" << endl; } String::String(const char* source) { if (source == nullptr) { // 如果参数为空,给成员变量默认初始值 m_data = new char[1]; *m_data = '\0'; } else { // 如果不为空,则拷贝源串到 m_data int length = strlen(source); m_data = new char[length + 1]; strcpy_s(m_data, length + 1, source); } cout << "调用有参构造" << endl; } String::String(const String& s) { // 拷贝和赋值要区分对待 int length = strlen(s.m_data); m_data = new char[length + 1]; strcpy_s(m_data, length + 1, s.m_data); cout << "调用拷贝构造" << endl; } String& String::operator=(const String& s) { // 必须检查自赋值,自赋值,直接返回本对象的引用 if (this == &s) return *this; // 先释放原内存 if (m_data != nullptr) delete[] m_data; // 分配新的内存资源,并复制内容 int length = strlen(s.m_data); m_data = new char[length + 1]; strcpy_s(m_data, length + 1, s.m_data); cout << "调用赋值构造" << endl; // 返回本对象的引用 return *this; } String::~String() { if (m_data != nullptr) { // 清理内存资源 delete[] m_data; m_data = nullptr; } cout << "调用析构函数" << endl; } int main() { // 无参构造 String str1; String str4; // 有参构造 String str2("123456"); // 拷贝构造 String str3(str2); // 赋值构造 str1 = str4; system("pause"); return 0; } 执行输出: 调用无参构造 调用无参构造 调用有参构造 调用拷贝构造 调用赋值构造 请按任意键继续. . . 本文标题: C++string类简单实现 本文作者: 夏至未至 发布时间: 2022年8月10日 11:04 最近更新: 2022年8月10日 11:13 原文链接: 许可协议: 署名-非商业性-禁止演绎 4.0 国际(CC BY-NC-ND 4.0) 请按协议转载并保留原文链接及作者 strings(2) 上一个 C++11元组(tuple)的使用 下一个 C++Builder 6.0 开发扩展工具推荐 当前文章评论暂未开放,请移步至留言处留言。