奇葩,奇葩

hurricane313 2017-08-18 11:45:59
A为定义好的类名,下面的代码真是让人头大。 A a; a = A(); 有这样的写法吗?
...全文
871 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
SHA-ZI 2017-08-31
  • 打赏
  • 举报
回复
敲一下什么都知道了
赵4老师 2017-08-24
  • 打赏
  • 举报
回复
《C++编程思想》
Remove_ 2017-08-24
  • 打赏
  • 举报
回复
a = A(); 没明白这个是啥
relive007 2017-08-23
  • 打赏
  • 举报
回复
没必要这么写,确实是画蛇添足。 a = A() 这句是两个对象的赋值。需要定义赋值的行为,就是重载=号运算符,否则存在隐患。 另外,最好也定义自己的拷贝构造函数。拷贝构造函数是在return一个对象时用到的。
hurricane313 2017-08-22
  • 打赏
  • 举报
回复
引用 23楼棉猴 的回复:
A a; //调用了类A默认的构造函数 a = A();//调用了类A的赋值函数 请参考 http://blog.csdn.net/hou09tian/article/details/70245341 http://blog.csdn.net/hou09tian/article/details/70844690
谢谢,直白,清楚。
棉猴 2017-08-22
  • 打赏
  • 举报
回复
A a; //调用了类A默认的构造函数 a = A();//调用了类A的赋值函数 请参考 http://blog.csdn.net/hou09tian/article/details/70245341 http://blog.csdn.net/hou09tian/article/details/70844690
hurricane313 2017-08-22
  • 打赏
  • 举报
回复
引用 21楼KaiZeek 的回复:
建议去看看c++ primer<第四版>中关于构造函数的介绍,包括默认构造函数,赋值构造函数,拷贝构造函数...,你就会明白了
棉猴 2017-08-22
  • 打赏
  • 举报
回复
写了一篇关于拷贝构造函数和拷贝赋值操作符的小文章 http://blog.csdn.net/hou09tian/article/details/77483175 请多指教
赵4老师 2017-08-21
  • 打赏
  • 举报
回复
理解讨论之前请先学会如何观察! 计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程! 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步Debug版对应汇编一行! 单步Debug版对应汇编千行不如单步Release版对应汇编一行! 不会单步Release版对应汇编?在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有,然后在IDE中运行。(一般人我不告诉他!单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。 VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
jena_wy 2017-08-21
  • 打赏
  • 举报
回复
一个调用构造函数,一个调用赋值函数。
ztenv 版主 2017-08-21
  • 打赏
  • 举报
回复
引用 13 楼 hurricane313 的回复:
引用 12楼悟er 的回复:
效率问题。其他问题取决于类A的内部实现。
你好,谢谢。其他问题指的是那些问题?多多指教。
比如:类对象的拷贝问题、赋值问题、析构问题、线程安全问题等等
KaiZeek 2017-08-21
  • 打赏
  • 举报
回复
建议去看看c++ primer<第四版>中关于构造函数的介绍,包括默认构造函数,赋值构造函数,拷贝构造函数...,你就会明白了
hurricane313 2017-08-21
  • 打赏
  • 举报
回复
引用 12楼悟er 的回复:
效率问题。其他问题取决于类A的内部实现。
你好,谢谢。其他问题指的是那些问题?多多指教。
hurricane313 2017-08-21
  • 打赏
  • 举报
回复
引用 14楼悟er 的回复:
引用 13 楼 hurricane313 的回复:
[quote=引用 12楼悟er 的回复:]效率问题。其他问题取决于类A的内部实现。
你好,谢谢。其他问题指的是那些问题?多多指教。
比如:类对象的拷贝问题、赋值问题、析构问题、线程安全问题等等[/quote]假如,在类B中定义了类A的对象a,定义的代码如A a;那么还需要在B的构造函数中用a=A();来初始化a吗?是不是没有必要,类A的构造函数A()会被自动调用初始化对象a?
hurricane313 2017-08-21
  • 打赏
  • 举报
回复
引用 15楼jena_wy 的回复:
一个调用构造函数,一个调用赋值函数。
是不是仅仅第一行就够了,第一行代码建立了对象,也调用了无参数的构造函数,第二行反而画蛇添足了。
hurricane313 2017-08-21
  • 打赏
  • 举报
回复
引用 17楼kakabulusi 的回复:
A a; //创建一个对象a a = A();//调用A类的构造函数,对对象a进行初始化操作。 参考 CFont MyFont = CFont(............);//所不同的只是A() 是没有参数的构造函数。
我的意思是,这两行代码是不是不够妥当。如果仅仅定义变量a,第一行就够了,第二行属于画蛇添足。
kakabulusi 2017-08-21
  • 打赏
  • 举报
回复
A a; //创建一个对象a a = A();//调用A类的构造函数,对对象a进行初始化操作。 参考 CFont MyFont = CFont(............);//所不同的只是A() 是没有参数的构造函数。
ztenv 版主 2017-08-20
  • 打赏
  • 举报
回复
效率问题。其他问题取决于类A的内部实现。
hurricane313 2017-08-19
  • 打赏
  • 举报
回复
想不明白,第二句是对a进行了初始化,还是新建了对象赋值给a
大米粥哥哥 2017-08-19
  • 打赏
  • 举报
回复
引用 6 楼 hurricane313 的回复:
[quote=引用 4楼das白 的回复:][quote=引用 2 楼 hurricane313的回复:][quote=引用 1楼das白 的回复:]第一个是无参构造 第二个创建一个对象赋给它 两者不一样
谢谢,关键是两行代码就这么写一起,有什么潜在的问题没有?谢谢[/quote] 没什么问题 只不过是重复赋值了 相当于 A a A b a=b 类一样可以直接=赋值[/quote]假如构造函数存在动态内存分配,是不是就造成了内存泄漏![/quote] 是 会造成错误 详细可以看看 拷贝构造函数 http://blog.csdn.net/lwbeyond/article/details/6202256/
加载更多回复(9)

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧