为了账号安全,请及时绑定邮箱和手机立即绑定

关于Watch w(t);

Watch w(t);

拷贝构造函数并不需要函数名和类名同名

之前课上只说了拷贝构造函数的格式是: 类名(const 类名 &变量名)

这里换成对象就是   类名(const 类名 &对象名),&对象名只是一个引用,引用的这个对象t是有参数值的

类中实例化的对象没有传值,但是这个对象需要传值,由于参数列表相同,所以给类中实例化的对象m_tTime传了t


各位大佬,我这样理解有问题吗?

正在回答

3 回答

正解如下:

Watch类中定义了对象成员,即 

Time m_tTime;

以及一个拷贝构造函数

Watch(const Time &t)

的确是类名与拷贝构造函数要同名,一楼说的没毛病,是我当时理解错了

该拷贝构造函数传入的是Time类型的引用t,而t刚刚好是主函数中初始化的

Time t(6, 30, 20);

在这里使用了如下的初始化列表,意思就是将t的内容传给m_tTime

Watch(const Time &t):m_tTime(t)

这是一个深拷贝,即将t对象的数据内容传给了m_tTime, 从而使得当拷贝构造函数执行完毕后,m_tTime有相应的数据成员内容,即

m_tTime.m_iHour;         //=6
m_tTime.m_iMinute;     //=30
m_tTime.m_iSecond;    //=20


2 回复 有任何疑惑可以回复我~

这个练习中像下面这样写也可以编译通过,也就是说写成拷贝构造函数的确能运行,但这么看不就违背了拷贝构造函数必须类名和函数名同名的规定了么?

Watch(const Time &t):m_tTime(t)   {  }


0 回复 有任何疑惑可以回复我~
#1

教不懂学不会的菜鸟程序猿小白小黄小强

":m_tTime(t)"这部分是初始化列表,并不是函数名,你去了解一下初始化列表吧。
2019-03-08 回复 有任何疑惑可以回复我~
#2

Cyber丶Kaka 提问者 回复 教不懂学不会的菜鸟程序猿小白小黄小强

Watch(const Time &t)这个不就是拷贝函数吗?
2019-03-08 回复 有任何疑惑可以回复我~
#3

慕雪3303231

回复 Cyber拷贝构造函数的返回值哪去了?
2019-03-17 回复 有任何疑惑可以回复我~
#4

Cyber丶Kaka 提问者 回复 慕雪3303231

你好,拷贝构造函数其返回的是一个对象,不是返回值,这里默认返回的就是t 浅拷贝是简单地返回指针地址,深拷贝则是复制对象内容 这段代码是没有任何问题的,因为是参考答案,但我只是不理解为什么这里要这么写 而且我问的是:我这样理解有错误吗?请回答有还是没有,如果没有,请说明理由,谢谢!
2019-03-20 回复 有任何疑惑可以回复我~
#5

Cyber丶Kaka 提问者 回复 Cyber丶Kaka 提问者

不好意思,返回的是m_tTime
2019-03-20 回复 有任何疑惑可以回复我~
查看2条回复

同为小白过来说说我的理解:

1、拷贝函数应该是要跟类名同名的,跟构造函数类似,区别在于拷贝函数会有一个const变量的参数。

2、顾名思义,拷贝函数的作用是拷贝,拷贝的对象就是传入的const变量的参数,这个参数就是对象的引用。

3、通过赋值的方式实例化对象,这个值就是传入给拷贝函数的参数,拷贝函数因此有了拷贝的对象。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之模板篇
  • 参与学习       91173    人
  • 解答问题       318    个

本C++教程力求即学即会,所有知识以实践方式讲解到操作层面

进入课程

关于Watch w(t);

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信