考点:构造函数、析构函数和赋值函数的编写方法
// 已知条件
class String
{
public:
String (const char* str = NULL) {} // 构造函数
String(const String &other); // 拷贝构造函数
~String(); // 析构函数
String & operator = (const String &other);
private:
char* m_cStr;
};
代码实现
#include <iostream>
using namespace std;
class String
{
public:
String (const char* str = NULL) {}
String (const String &other);
~String();
String & operator = (const String &other);
private:
char* m_cStr;
};
String::String (const char* str)
{
if (NULL == str)
{// 如果为空,就存空字符串
m_cStr= new char[1];
m_cStr = '\0';
}
else
{// 如果不为空,就分配容纳空间
m_cStr = new char[strlen(str) + 1];
strcpy(m_cStr, str);
}
}
String::String (const String &other)
{
m_cStr = new char[strlen(other.m_cStr) + 1];
strcpy(m_cStr, other.m_cStr);
}
String ~String ()
{
if (NULL != m_cStr)
{
delete[] m_cStr;
m_cStr = NULL;
}
}
String & String::operator = (const String &other)
{
// 如果对象与other的对象是一样的
if (this == &other)
{
return *this;// 直接返回本身
}
delete[] m_cStr;// 释放内存
m_cStr = new char[strlen(other.m_cStr) + 1];
strcpy(m_cStr, other.m_cStr);
return *this;
}
#include "String.h"
int main()
{
String s("hello");// 调用构造函数
String ss("world");// 调用构造函数
String cs(s);// 调用拷贝构造函数
cs = ss;// 调用赋值函数
return 0;
}