注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

The Bloom of Youth

本博客已搬家至http://kuangqi.me

 
 
 

日志

 
 

Effective C++ 阅读笔记(非·持续更新)  

2011-01-07 17:11:31|  分类: 编程之美 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

"This book is a must-have for both C++ veterans and newbies. After you have finished reading it, it will not collect dust on your bookshelf — you will refer to it all the time."

Sam Lee, Software Developer

打算开始读经典著作。从最薄的开始吧《Effective C++》,就它了!希望能读下来,希望不仅仅是希望!把阅读的收获整理下来,欢迎各路高手与我交流。

2011年1月7日 绪论
关于一个类的默认构造函数拷贝构造函数重载赋值运算符。照葫芦画瓢写了个程序验证了一下。
#include <iostream>
using namespace std;
class Widget
{
public:
    Widget() {cout << "调用了默认构造函数" << endl;}
    Widget (const Widget &w) {cout << "调用了拷贝构造函数" << endl;}
    Widget &operator = (const Widget &w) {cout << "调用了重载赋值运算符" << endl;}
};
int main()
{
    Widget w1;
    Widget w2 (w1);
    w1 = w2;
    Widget w3 = w2;
}
程序运行后会输出什么?答案是:
调用了默认构造函数
调用了拷贝构造函数
调用了重载赋值运算符
调用了拷贝构造函数

前三行没啥疑问。为啥最后一个不是调用了重载赋值运算符?书上的解释很明白,貌似是如此简单:

Fortunately, copy construction is easy to distinguish from copy assignment. If a new object is being defined (such as w3 in the statement above), a constructor has to be called; it can't be an assignment. If no new object is being defined (such as in the "w1 = w2" statement above), no constructor can be involved, so it's an assignment.

是啊,创建对象肯定要调用一个构造函数的,那不是默认构造就是拷贝构造了。默认构造无法完成赋值,那就肯定是拷贝构造了。拷贝构造都调用了,那重载的赋值运算符自然就不需要调用了。

  评论这张
 
阅读(660)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018