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

c/c++ 构造函数、拷贝构造函数、析构函数和赋值运算符重载

2016-11-02 20:29 411 查看
构造函数

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐