126.已知类String 的原型为:
class String
{
public:
String(const char *str = NULL); // 普通构造函数
String(const String &other); // 拷贝构造函数
~ String(void); // 析构函数
String & operate =(const String &other); // 赋值函数
private:
char *m_data; // 用于保存字符串
};
请编写String 的上述4 个函数。
答案:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
class String
{
public:
String(const char *str = NULL); // 普通构造函数
String(const String &other); // 拷贝构造函数
~String(void); // 析构函数
String& operator=(const String &other); // 赋值函数
private:
char *m_data; // 用于保存字符串
};
String::String(const char *str)
{
if ( str == NULL ) //strlen在参数为NULL时会抛异常才会有这步判断
{
m_data = new char[1] ;
m_data[0] = '\0';
}
else
{
m_data = new char[strlen(str) + 1];
strcpy(m_data,str);
}
}
String::String(const String &other)
{
m_data = new char[strlen(other.m_data) + 1];
strcpy(m_data,other.m_data);
}
String::~String(void)
{
delete[] m_data;
}
String& String::operator=(const String &other)
{
if ( this == &other)
return *this ;
delete[] m_data;
m_data = new char[strlen(other.m_data) + 1];
strcpy(m_data, other.m_data);
return *this;
}
int main()
{
String str("sas");
String str1(str);
String str2;
str2 = str1;
return 1;
}值得注意的是
new char[10];分配一块连续的内存,也就是一个数组,里面有10个元素
new char(10);分配一块内存,有一个元素,该元素被初始化为10
本文详细介绍了如何在C++中实现一个简单的String类,包括普通构造函数、拷贝构造函数、析构函数及赋值操作符重载的完整代码。通过示例展示了String对象的创建、拷贝和赋值过程。
153

被折叠的 条评论
为什么被折叠?



