string构造函数 析构函数

#include<iostream>
using namespace std;
class String
{
public:
	String(const char *str = NULL); //构造函数
	String(const String &other); //拷贝构造函数
	~String(void); //析构函数
	String& operator=(const String &other); //等号操作符重载

	void ShowString();


private:
	char *m_data; //指针
};


String::~String()
{
	delete[] m_data; //析构函数,释放地址空间
}
String::String(const char *str)
{
	if (str == NULL)//当初始化串不存在的时候,为m_data申请一个空间存放'\0';
	{
		m_data = new char[1];
		*m_data = '\0';
	}
	else//当初始化串存在的时候,为m_data申请同样大小的空间存放该串;
	{
		int length = strlen(str);
		m_data = new char[length + 1];
		strcpy(m_data, str);
	}
}


String::String(const String &other)//拷贝构造函数,功能与构造函数类似。
{
	int length = strlen(other.m_data);
	m_data = new char[length + 1];
	strcpy(m_data, other.m_data);
}
String& String::operator =(const String &other)
{
	if (this == &other)//当地址相同时,直接返回;
		return *this;

	delete[] m_data;//当地址不相同时,删除原来申请的空间,重新开始构造;

	int length = strlen(other.m_data);
	m_data = new char[length + 1];
	strcpy(m_data, other.m_data);

	return *this;
}

void String::ShowString()//由于m_data是私有成员,对象只能通过public成员函数来访问;
{

	cout << this->m_data << endl;

}

void main()
{
	String AD;
	char * p = "ABCDE";
	String B(p);
	AD.ShowString();
	AD = B;
	AD.ShowString();


}

猜你喜欢

转载自blog.csdn.net/qq_31339017/article/details/78118468