C++学习笔记十九之String类的实现

290 阅读1分钟

String类的实现

String.h头文件

#ifndef _STRING1_H_	
class CString1
{
public:
    //构造函数初始化m_data
	CString1(char *data=nullptr);
	//析构函数
	~CString1();
	//拷贝构造函数
	CString1(const CString1 &other);
	//赋值构造函数
	CString1& operator=(const CString1 &other);
private:
	char *m_data;
};
#endif

String.cpp源文件

#include "String1.h"
#include <string.h>

CString1::CString1(char *data)
{
	if (nullptr == data)
	{
		m_data = new char;
		*m_data = '\0';
	}else
	{
		int len = strlen(data);
		m_data = new char[len + 1];
		strcpy(m_data, data);
	}
}

CString1::~CString1()
{
	delete[] m_data;
	m_data = nullptr;
}

CString1::CString1(const CString1 &other)
{
	//m_data = other.m_data;//浅拷贝

	//深拷贝:指针指向的地址不同,拷贝指针指向的内容。
	int len = strlen(other.m_data);
	m_data = new char[len + 1];
	strcpy(m_data, other.m_data);
}

CString1& CString1::operator=(const CString1 &other)
{
	//判断是否是同一个字符串对象
	if (this == &other)
	{
		return *this;
	}else
	{
		//释放原来的内存
		delete[] m_data;
		//重新申请新的内存地址,拷贝字符串
		int len = strlen(other.m_data);
		m_data = new char[len + 1];
		strcpy(m_data, other.m_data);
	}
}

main函数中的调用

int main(){
    
	CString1 s;
	CString1 s1(s);
	CString1 s2("abcd");
	s1 = s2;
    return 0;
}