代码就是侯捷老师的代码,包括了最基础的构造函数、拷贝构造函数和拷贝赋值函数。

 

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 = '\0';
	}
}

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;
}

 

C++笔记:实现简单string类_拷贝构造函数