10 2015 档案

摘要:最近在学习C++对象模型,看的书是侯捷老师的《深度探索C++对象模型》,发现自己以前对构造函数存在很多误解,作此笔记记录。 默认构造函数的误解 1.当程序猿定义了默认构造函数,编译器就会直接使用此默认构造函数 来一个简单的栗子 我们知道,一个对象,在定义的时候就一定会调用其构造函数。... 阅读全文
posted @ 2015-10-24 19:18 followDreamLgx 阅读(760) 评论(0) 推荐(0)
摘要:假如我们需要取得两个变量中较大的变量,或许,我们可以通过重载的方式实现,如下。 有一天,我们定义了一个新的type,School,取决于max的实现,我们不仅需要重载School::operator<(), 或者School::operator ()还要重载一个新的max 使用C++的模板,从此告别... 阅读全文
posted @ 2015-10-23 20:33 followDreamLgx 阅读(890) 评论(0) 推荐(0)
摘要:学校的第一门专业课是C,局部变量只能在{}开始的地方定义,否则出错。这样有个好处,就是要寻找某个变量的定义式时非常方便,但是VS提供了F12,跳到定义处,这个好处就显得非常微弱了。只是这个习惯被我沿用到C++中,一直没有改过来,直到我开始意识到,这样的变量定义有时会降低程序的性能。 一个变量在函数的 阅读全文
posted @ 2015-10-18 16:04 followDreamLgx 阅读(541) 评论(2) 推荐(0)
摘要:若所有的参数皆需要类型转换——请为此采用non member函数 经常使用C++的程序猿(希望更多的程序媛),一般不会同意让classes支持类型转换,至于为什么,请看后续的博客。假如我们设计一个表示有理数的class,允许”整数隐式转换为有理数似乎很合理“。首先来一个简单的实现。 有... 阅读全文
posted @ 2015-10-17 11:37 followDreamLgx 阅读(642) 评论(0) 推荐(0)
摘要:在前一篇 "文章" ,我们提到,使用private来代替public以提高class的封装性。这一篇文章,我们将对接口发起攻势。首先来个简单的例子。 在上面的例子中,我们定义了一个网页浏览器的类,可以清楚cache,历史记录,以及cookies。然后我们有时希望这三个步骤可以一次性执行,所以定义了c 阅读全文
posted @ 2015-10-16 22:24 followDreamLgx 阅读(1455) 评论(0) 推荐(0)
摘要:刚开始接触OOP的时候,打心底里我不喜欢private与protected。我声明一个public然后不直接用它,不就跟private一样吗?在某些场合下,我还能偷偷地用一下public变量,这不是更方便吗?所以,以前写的class,除了class几个字母外,其它的跟struct没啥区别。做了几个小... 阅读全文
posted @ 2015-10-16 20:56 followDreamLgx 阅读(238) 评论(0) 推荐(0)
摘要:在上一篇博客中,我们介绍了简单地使用值传递带来的种种麻烦,相信有些朋友会一心一意将其斩草除根,但是当返回值也使用了引用的时候,麻烦就来了。 依然来个简答的例子 operator 的返回值是一个reference。记得那句话吗?“引用是另外一个变量的别名”,那么问题就来了,operator 返... 阅读全文
posted @ 2015-10-16 16:31 followDreamLgx 阅读(299) 评论(0) 推荐(0)
摘要:第一个原因。。。 C++默认使用变量的方式传递对象。假如没有另外指定,函数的参数都是以实参的副本为初值,而函数的返回值也是一个复件。这些复件由对象的copy构造函数产出,这会让值传递成为昂贵的操作。来一个简单的例子 简单地看,Student的复制构造函数在传入参数的时候会被调用,产生pla... 阅读全文
posted @ 2015-10-16 15:46 followDreamLgx 阅读(665) 评论(3) 推荐(1)
摘要:一个简答易错的例子 一年后使用这个接口的时候,写了 Date d(15,10,2015) 或者 Date d(2015,10,15) ,准确的应该是 Date d(10,15,2015) ,欧,多么低级的错误,花了我一个早上的时间去调试这个bug。 解决的方法 为参数声明自定义类型 这样子声明... 阅读全文
posted @ 2015-10-16 00:58 followDreamLgx 阅读(438) 评论(0) 推荐(0)