C++ 拷贝构造函数(赋值构造函数)看这一篇就够了

C++ 拷贝构造函数看这一篇就够了


默认情况下,类对象的拷贝,是每个成员变量逐个拷贝。
如果一个类的构造函数的第一个参数,是所属类类型的引用,如果还有其他额外参数,额外参数都有默认值。函数默认参数必须放在函数声明中。则这个构造函数就叫做拷贝构造函数。
作用:会在一定的时机,被系统自动调用。

Time::Time(const Time& temptime, int a) {//第一个参数一般都是const
	minute = 40;
	cout << "调用了拷贝构造函数" << endl;
}
	Time mytime;//调用不带参数的构造函数
	Time mytime2 = mytime;//指向拷贝构造函数
	Time mytime3(mytime);//指向拷贝构造函数
	Time mytime4{ mytime };//指向拷贝构造函数
	Time mytime5 = { mytime };//指向拷贝构造函数
	Time mytime6;//调用不带参数的构造函数
	mytime6 = mytime5;//调用的不是拷贝构造函数

拷贝构造函数只能有一个。

  1. 拷贝构造函数第一个参数带着const。如果不加,可能会造成错误,比如Time mytime = fun(),fun()为一个返回值为Time对象的函数。
  2. 拷贝构造函数不要声明成explicit(禁止隐式转换)。因为系统会自动隐式转换。无参,一个参数的构造函数一般加上explicit(防止系统把数字当成对象)。
  3. 成员变量逐个拷贝这个功能,因为我们自己定义的拷贝构造函数丢失了作用。或者说,我们自己的拷贝构造函数取代了系统的默认的拷贝构造函数。
  4. 如果我们没有定义拷贝构造函数,编译器会帮我们定义一个默认拷贝构造函数,一般叫合成拷贝构造函数
  5. 这个合成拷贝构造函数,一般就是将参数的成员逐个拷贝到正在创建的对象中。每个成员的类型,决定了它如何拷贝,如果成员变量时整型,就直接把值拷贝过来,如果成员是类类型,就会调用这个类的拷贝构造函数。
  6. 如果自己定义了拷贝构造函数,就取代了系统定义了。就必须在自己的拷贝构造函数中给类成员赋值。否则成员值会随机。
  7. 发生调用拷贝构造函数的情形
    将对象作为实参传递给非引用的形参。
    从一个函数中返回对象的时候
    还有一些其他情况
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值