构造函数
using namespace std;
class String
{
public:
String(const char* pData="")
:_pStr(new char[strlen(pData) + 1])
{
if (_pStr==NULL)
{
_pStr = new char[1];
*_pStr = '/0';
}
strcpy_s(_pStr, strlen(_pStr), pData);
cout << "String()" << endl;
}
类的实例化
特点:
1.函数名和类名相同;
2.没有返回值;
3.不能用const修饰。
拷贝构造函数
是特殊的构造函数,创建对象时使用存在的同类对象来进行初始化,由编译器自动调用。
String(const String& s)
:_pStr(new char[strlen(s._pStr) + 1])
{
if (_pStr==NULL)
{
_pStr = new char[1];
*_pStr = '/0';
}
else
{
strcpy_s(_pStr, strlen(_pStr), s._pStr);
}
cout << "String(const)" << endl;
}
特点:
1.是构造函数的重载;
2.参数必须使用同类型对象的引用传递;
3.若无显示定义,系统会自动合成一个;
4.会依次拷贝类的数据成员初始化。
使用场景:
1.对象实例化对象;
2.传值方式作为函数的参数;
3.传值方式作为函数返回值(return Data)。
析构函数
~String()
{
if (NULL != _pStr)
{
delete[] _pStr;
_pStr = NULL;
}
}
特点:
1.无参数无返回值;
2.对象生命周期结束时,编译器会自动调用;
3.作用不是删除对象,清理而已。
赋值运算符重载
自定义的赋值运算符重载函数的作用于内置赋值运算符的作用类似,但和拷贝构造一样存在深拷贝浅拷贝的问题。
String& operator = (const String& s)
{
_pStr = new char[strlen(s._pStr) + 1];
if (_pStr==NULL)
{
_pStr = new char[1];
*_pStr = '/0';
}
strcpy_s(_pStr, strlen(_pStr), s._pStr);
return *this;
cout << "operator" << endl;
}