代码就是侯捷老师的代码,包括了最基础的构造函数、拷贝构造函数和拷贝赋值函数。
String.h
#pragma once #include<string.h> #ifndef STRING_H #define STRING_H class String { public: String(const char* cstr = 0); // 构造函数 String(const String& str); //拷贝构造函数 String& operator=(const String& str); //拷贝赋值函数 ~String(); char* get_c_str() { return m_data; } private: char* m_data; }; String::String(const char* cstr) { if (cstr) { m_data = new char[strlen(cstr) + 1]; strcpy(m_data, cstr); } else { //如果传进来的是空字符串 m_data = new char[1]; *m_data = ' '; } } inline String::~String() { delete[] m_data; // array new 一定要和array delete搭配使用 } inline String::String(const String& str) { m_data = new char[strlen(str.m_data) + 1]; strcpy(m_data, str.m_data); } inline String& String::operator=(const String& str) { if (this == &str) { //检查自我赋值 return *this; } delete[] m_data; m_data = new char[strlen(str.m_data) + 1]; strcpy(m_data, str.m_data); return *this; } #endif
main.cpp
#include<iostream> #include "String.h" using namespace std; int main(int argc, char* argv[]) { String s{ "Hello, World!" }; cout << s.get_c_str() << endl; }