您的位置:首页 > 编程语言 > C语言/C++

【C/C++】String类实现

2015-08-07 17:01 106 查看
今天去参加面试,有这么一道题

====================我是华丽丽的分割线=================

首先补充一些基础知识:

关于构造函数:

通俗的讲,在类中,函数名和类名相同的函数称为构造函数。它的作用是在建立一个对象时,作某些初始化的工作(例如对数据赋予初值)。C++允许同名函数,也就允许在一个类中有多个构造函数。如果一个都没有,编译器将为该类产生一个默认的构造函数。

构造函数上惟一的语法限制是它不能指定返回类型,甚至void 也不行。

关于析构函数:

当一个类的对象离开作用域时,析构函数将被调用(系统自动调用)。析构函数的名字和类名一样,不过要在前面加上 ~ 。对一个类来说,只能允许一个析构函数,析构函数不能有参数,并且也没有返回值。析构函数的作用是完成一个清理工作,如释放从堆中分配的内存。

一个类中可以有多个构造函数,但析构函数只能有一个。对象被析构的顺序,与其建立时的顺序相反,即后构造的对象先析构。

====================我是华丽丽的分割线=================

String 类的原型如下,实现下面的四个函数

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 (NULL == str)  //当字符串不存在时,为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()
{
delete []m_data; // [] 在这里表示用来区别内部变量和外部变量  如果m_data是外部变量 就必须添加[]
}


拷贝构造函数:

//拷贝构造函数
String::~String(const String &other)
{
int length = strlen(other.m_data);
m_data = new [length + 1]; //m_data = new char[length + 1];   这里切记不可以添加char   在这里只是对m_data分配空间
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 [length + 1];
strcpy(m_data,other.m_data);
return *this;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: