2014年2月10日
摘要: 1、TMP(template metaprogramming),模版元编程有两个效力:第一,它让某些事情更容易;第二,可将工作从运行期转移到编译期。 阅读全文
posted @ 2014-02-10 20:18 Andy Niu 阅读(326) 评论(0) 推荐(0) 编辑
摘要: 1、template是产生代码的代码,这就意味着源码看起来很少,生成的目标码大量膨胀。2、考虑,如果两个方法有重复代码,我们会新建一个方法,把重复的代码放进去,原先两个方法调用第三个方法。如果两个类有重复代码,我们把重复代码移到一个新的类中,通过继承或者复合,避免重复。3、但是在template中,这种重复是隐晦的,只有一份template代码,可能会生成一系列重复的代码。考虑矩阵模板类,有两个模版形参:矩阵元素的类型T和矩阵的大小S。4、SquareMatrix 和SquareMatrix 会实例化两个模板类,这两个模板类有大量重复代码,比如:invert方法。5、如何解决呢? 建立一个模. 阅读全文
posted @ 2014-02-10 20:03 Andy Niu 阅读(824) 评论(0) 推荐(0) 编辑
摘要: 1、non-member方法与member方法没有本质区别,对于编译器来说,都是non-member方法,因为member方法绑定的对象,会被编译器转化为non-member方法的第一个形参。non-member方法与member方法唯一的区别是:member方法封装性更差,因为它可以访问private成员。2、根据面向对象的要求,数据与方法应该和对象捆绑在一起,这意味着应该使用member方法。其实,这个建议是错误的。为什么?3、首先,non-member、non-friend方法提供更大的封装性。4、其次,考虑下面的需求,我只需要类中的一个方法。如果是member方法,必须把整个class 阅读全文
posted @ 2014-02-10 19:16 Andy Niu 阅读(1022) 评论(0) 推荐(0) 编辑
摘要: 1、为什么要将成员变量声明为private,语法一致性,只通过方法暴露接口。2、使用方法,可以对成员变量更精确的控制。比如:为所有可能的实现提供弹性,不同实现可以替换;控制可读可写;验证约束条件;处理事前和事后状态;在多线程环境执行同步控制。3、public会破坏成员变量的封装性,程序中到处都可修改成员变量。将成员变量声明为private,暴露一个方法接口,可以统一管理。4、对于成员变量,protected并不比public更具封装性。 阅读全文
posted @ 2014-02-10 18:41 Andy Niu 阅读(516) 评论(0) 推荐(0) 编辑
摘要: 1、考虑有理数Rational,有个友元操作符*,返回Rational对象。返回对象,导致临时对象的构造,析构。效率低,因此会想返回方法内局部对象的引用,这种方法不可行。为什么?2、调用方法是在stack上执行,方法执行完毕,局部对象销毁。假如返回方法内局部对象的引用,方法执行完,局部对象销毁,这时候,引用指向一堆垃圾。3、你可能会想,我在heap上构造一个对象,返回引用。这也不可行,首先,要求客户端负责delete,这不合理。其次,退一步说,就算客户负责,执行delete。但是有些情况,客户无法执行delete。比如:Rational d = a*b*c; a*b的结果没有暴露出来,客户无法 阅读全文
posted @ 2014-02-10 18:21 Andy Niu 阅读(302) 评论(0) 推荐(0) 编辑