在之前c语言的学习中,对于字符串我们很难像整型和其他变量那样进行比较和直接的复制或者定义去运用。但在C++中为了解决这个问题提供了一种类,String类,以类型的形式对字符串进行封装,它除了作为储存字符的容器外,可以对字序列的一系列操作。
下面我们对String类进行简单的模拟实现:
namespace wjx
{
class string
{
public:
private:
char* _str;
};
首先,我们定义一个自己的命名空间,来实现我们的string类,定义初始数据char*类型的_str来作为string类中的数据。
string(const char* str)
:_str(new char[strlen(str) + 1])
{
strcpy(_str, str);
}
我们先来实现String类中的构造函数,首先计算出所加字符串的长度,为原有数据_str开辟空间,此处+1是为了放置'\0'方便操作,开辟空间后将str通过strcpy函数复制给_str,完成构造。
string(const string& s)
:_str(new char[strlen(s._str)+1])
{
strcpy(_str, s._str);
}
~string()
{
delete[] _str;
_str = nullptr;
}
上述为实现string类的拷贝构造函数(深拷贝)和析构函数,一个类中如果没有定义拷贝构造函数,就会调用默认的拷贝构造函数。而拷贝构造分为深浅拷贝,下图为