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

构造函数

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;
	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值