拷贝构造函数c语言,拷贝构造函数和重载赋值运算符的区别

其实自己对这两个区别是一直不怎么弄懂的,而且也曾经问过别人是怎么一个区别,不过人家说叫我看一下书,可惜的是最后还是没有弄懂。

一直到昨天,考C++的时候,我似乎突然觉得明白了什么,于是就构思了一个测试的程序来看一下自己的猜想是否正确,现在实现以下,觉得已经能够明白了他们之间的却别了。

记得当初我是这么问别人的:有了拷贝构造函数,就可以b =

a;也没有错了,那么还要重载赋值运算符干嘛?两个有什么区别吗?其实当时他们是叫我去看一下拷贝构造函数的概念,结果我居然忘记了(其实很正常,因为记性越来越差了都)。

为了测试到底有什么区别,我写了下面的一个测试程序:

class A{

public:

A(){cout << "Structor!" <<

endl;}

A(A & a){cout << "Copy!" <<

endl;}

};

int main()

{

A a, b = a;

b = a;

return 0;

}

结果发现输出是:

Structor!

Copy!

如果把 A a, b = a;改为: A a, b;

然后输出是:

Structor!

Structor!

这样其实就可以看出到底是怎么样的一个情况:

其实不管有没有拷贝构造函数,b =

a;都没有错,因为系统会自动生成一个默认的拷贝构造函数,而有了拷贝构造函数的话,赋值语句b =

a;还是调用系统默认的拷贝构造函数。

而且我们应该还注意到的一个问题就是:拷贝构造函数的定义是说用一个对象去初始化同类的另一个对象的情况,注意到是初始化而不是其他的,所以这就是区别所在。

如果有了拷贝构造函数和重载赋值运算符的函数,那么在初始化的时候自然而然调用的是拷贝构造函数;在赋值的时候自然而然地是调用重载赋值运算符的函数。

不过或许我们还有疑问:如果只有两者的其中之一呢,比如说只有拷贝构造函数,那么赋值的情况又是什么;那如果是只有重载的赋值运算符函数而没有自定义的拷贝构造函数呢?那这初始化是什么情况?

不管是哪一个问题,我们都要注意到系统地问题,如果问题是后者,那要注意的是系统为我们生成一个默认的拷贝构造函数,而前者的话我自己也不清楚,估计也是差不多吧~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值