摘要: Item 6:区别Increment和Decrement操作符的前置(prefix)和后置(postfix)形式 前置和后置的区别主要在于函数参数不一样,后置形式中多了一个int型的参数,在后置形式被调用时,编译器会自动给该int型参数传0值。其次在于前置和后置形式所返回的类型不同,前置返回一个引用,后置返回一个const对象。 下面主要讲解increment的前置和后置形式,decrement类似。 //前置式:累加后取出(increment and fetch) UPInt&UPInt::operator++() // 1 { (*this)+=1; ret... 阅读全文
posted @ 2014-03-14 10:16 勇者行天下 阅读(681) 评论(2) 推荐(1) 编辑
摘要: Item 5: 对定制的“类型转换函数”保持警觉 C++从C语言那继承了其隐式转换,可以实现不同类型之间的转换,且C++的隐式转换还存在更令人害怕的转型,有可能出现数据丢失。对于这些,你无能为力,因为这都是语言自身提供的。然而当你的自定义类型登场时,你可以通过提供某些函数,来作为编译器的转型之用。但是为什么最好不要提供任何类型转换函数呢? 原因在于:在你为打算也为预期的情况下,此类函数可能会被调用,而其结果可能不正确、不直观,很难调试。 在C++中,编译器会通过两种方式来实现类型的隐式转换: 1、使用隐式类型转换符,即关键词operator之后加上一个类型名称,如operator ... 阅读全文
posted @ 2014-03-13 16:09 勇者行天下 阅读(737) 评论(0) 推荐(2) 编辑
摘要: Item 4:非必要不提供Default Constructor 所谓default constructor就是不需要提供任何自变量就可以被调用的构造函数,即它能在没有任何外来信息的情况下将对象初始化。 如果class constructor不能确保object的所有data member都能被正确的初始化,那么最好不要定义default constructor;虽然这样做会对class的使用方式带来一些限制,但同时也带来了一个保证:当你真的使用这样的class时,你可以预期该constructor产生的对象都是被完整初始化的。 那么什么时候应该提供default constructor... 阅读全文
posted @ 2014-03-09 22:53 勇者行天下 阅读(727) 评论(0) 推荐(1) 编辑
摘要: Item 3:绝对不要以多态方式处理数组 当用一个base class 的指针或者引用来处理derived class objects时,我们就认为这样的指针或者引用具有多态性。 多态性是C++的特性之一,应该是方便程序员的,但是如果使用不当,也会给程序员带来许多苦恼。 在C++中,允许使用base class的指针或者引用来操作derived class 的对象数组,这样的操作,会给你带来意想不到的麻烦。 这是为什么呢? 原因就在于:指针大小的算术运算。 下面我们举例说明:当我们输出derived class 对象的数组元素时,会用到vd[i]进行操作,但是其实这是一个“指针算术... 阅读全文
posted @ 2014-03-08 23:10 勇者行天下 阅读(259) 评论(0) 推荐(0) 编辑
摘要: Item 2:最好使用C++提供的转型操作符对于很多从C转行从事C++的开发人员来说,都习惯使用C语言提供的强制类型转换,即使用“(类型)”这种方式,但是这种方式在C++中却是非常不好的习惯: 原因一:不管是开发人员还是开发工具,都不能很好的察觉该转型符; 原因二:不安全,C风格的转型符可以实现任何类型之间的转换,且其不能提示是否转型成功; 原因三:C++中,为了弥补这些缺陷,设计了新的转型符,安全性更高,且更容易被开发工具察觉。第一个类型:static_cast转型符 用法:static_cast(表达式); 说明:其基本拥有了与C旧式转型相同的威力和意义,以及相同的限制,但是它不... 阅读全文
posted @ 2014-03-07 22:26 勇者行天下 阅读(258) 评论(0) 推荐(0) 编辑
摘要: Item 1:仔细区别pointer和reference对于很多C++初学者来说,pointer和reference的区别,以及什么情况下该使用reference,什么情况下要使用pointer,都是一个很容易混淆的问题。对于这个问题,大家只要明白一点,就能很容易把握这个度:没有所谓的Null reference,一个reference必须总代表一个对象。因此,给出以下明确的建议: 1、当定义的变量需要改变以指向其他对象,或者它可以不指向任何对象时,应该使用pointer; 2、如果这个变量总要指向一个对象,那么它应该定义为reference; 3、在某些operator重载中,返回值用... 阅读全文
posted @ 2014-03-06 21:36 勇者行天下 阅读(697) 评论(0) 推荐(0) 编辑
摘要: win7笔记本共享无线网络,给我们带来了很多便利,不仅减少了购买无线路由器的开支,更是一个有线多个无线终端上网的必备神器(可以随人携带的无线路由器),但是当你出现如题目所述的问题时,你一定会感觉万分的沮丧,万般的无奈,因为楼主我碰到这个问题的时候也是在度娘中搜寻了无数的方法,也试验了无数的方法,终于皇天不负有心人,I get it! 是的,我找到真正的原因了,因此,为了不让其他人步我的后尘,我觉得分享出来。首先,讲讲win7怎么共享无线热点吧! 很简单,两行命令就能解决问题! 1、”开始“->”运行“->”cmd“->"netsh wlan set hostedne 阅读全文
posted @ 2014-01-07 14:09 勇者行天下 阅读(1105) 评论(0) 推荐(0) 编辑
摘要: 动态二进制搜索算法是在传统二进制算法的基础上进行改进的。传统二进制算法,每次传输的数据是全部长度的序列号,造成了识读时间段浪费;因此动态的二进制搜索算法在每次传输中,阅读器传输一部分,标签传输一部分(阅读传送部分+标签传送部分=序列号总长度),总的传输量是传统方法的一半,因此减少了因传输数据而引起的识读时间浪费。动态的二进制算法的主要命令和传统的二进制搜索算法一样,只是传输策略上有所不同。动态二进制搜索算法的识读过程1、阅读第一次发送最大序列号,请求所有标签发回其自身的序列号。2、阅读器检测到碰撞位,将最高碰撞位(X)置0,阅读器只传输N~X的位作为下一次的请求序列号。3、标签接收到新一轮的序 阅读全文
posted @ 2013-12-19 14:40 勇者行天下 阅读(1638) 评论(0) 推荐(0) 编辑
摘要: 二进制搜索防碰撞算法中用的主要命令有:1、Request(请求):阅读器向其识别区中的标签发送带有标签序列号的请求命令,标签接到命令后,其自身序列号小于或者等于该序列号的标签会将自己的序列号发送给阅读器,大于该序列号的标签不做回应。2、Select(选择):阅读器发送带有特定标签序列号的选择命令,只有与该序列号相同的标签才能被选中,只有别选中的标签才能进行之后的操纵(如读写数据)。3、Read-Data(读数据):被选中的标签把自身的数据发送给阅读器。4、Unselect(取消选择):取消读写完数据的标签的选中状态,使其进入“休眠”状态,休眠状态的标签不会对阅读器之后的任何命令进行响应。注意: 阅读全文
posted @ 2013-12-19 14:13 勇者行天下 阅读(1349) 评论(0) 推荐(1) 编辑