13.1

本节总结
介绍了复制构造函数的使用方法以及需要使用的情况

细节摘录
1. 复制情况下,操作过程是系统先创建一个临时对象(使用构造函数),然后再用复制构造函数复制到左边。
2. 如果要使用复制构造函数,那么构造函数就不能声明为explicit
3. 函数,容器,数组中都涉及到了复制函数机制。
4. 两种情况下一般要用到复制函数:1.有成员是指针 2. 复制时要做一些特定工作
5. 如果要禁止复制,只要将复制函数声明为private即可。

课后习题
1. 单个形参,且为本对象的引用,这样的【构造函数】就叫做复制构造函数。
2. 说明这种类型的构造函数被声明为explicit。
3. 第一句和最后一句那里都用了。
4.
#include <iostream>

using namespace std;

class NoName {
public:
	NoName() : pstring(new string), i(0), d(0) {};
	NoName(int a) : pstring(new string), i(a), d(0) {};
	NoName(NoName &N) {
		i=N.i; /* 问题是:成员是私有的,为什么可以直接取用?*/
		string *pstring=new string(*N.pstring);
		d=N.d;
	}

	int GetI() {
		return i;
	}
	double GetD() {
		return d;
	}
private:
	string * pstring;
	int i;
	double d;
};

int main()
{
	NoName a;
	NoName b(1);

	cout << a.GetI() << a.GetD() << endl;
	cout << b.GetI() << b.GetD() << endl;
	
	b=a;

	cout << a.GetI() << a.GetD() << endl;
	cout << b.GetI() << b.GetD() << endl;

	return 0;
}

5. a不用 b要 c 不用 d
6. 如果这样,则该函数
该函数的参数我们使用了值传递的方式,按照前面的分析,这需要调用复制构造函数,于是编译器又再度搜寻,最后当然又找到了它,于是进行调用,但同样地,传参时又要进行复制,于是再调用...这个过程周而复始,每次都是到了函数入口处就进行递归,直到堆栈空间耗尽,程序崩溃...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值