摘要:
本文是C++0x系列的第四篇,主要是内容是C++0x中新增的lambda表达式, function对象和bind机制。之所以把这三块放在一起讲,是因为这三块之间有着非常密切的关系,通过对比学习,加深对这部分内容的理解。在开始之间,首先要讲一个概念,closure(闭包),这个概念是理解lambda的基础。下面我们来看看wikipedia上对于计算机领域的closure的定义:Aclosure(alsolexical closure,function closureorfunction value)is afunctiontogether witha referencing environmen 阅读全文
posted @ 2013-12-24 19:28
Andy Niu
阅读(7467)
评论(1)
推荐(0)
摘要:
1、使用Non-Virtual Interface 实现方法模版 将虚方法声明为private,子类重写private的虚方法,在父类中通过public方法调用虚方法。NVI的优点是:可以在虚方法之前和之后做一些事情。2、使用方法指针实现策略模式 在类中关联一个方法指针,方法指针的形参是类对象的引用。实例化一个对象的时候,把一个方法传递给对象,这就意味着每个对象都有一个方法。这种方式提供了一些有趣的弹性:a、同一类型的不同对象可以有不同的计算方法;b、在运行期可以更改对象的计算方法。这种方式的缺点是:计算方法不能访问protected成员,要解决这个问题,只能弱化类的封装。3、使用tr1:.. 阅读全文
posted @ 2013-12-24 19:22
Andy Niu
阅读(230)
评论(0)
推荐(0)
摘要:
1、什么是多态? 父类指针指向子类对象,运行时期调用方法的时候,根据方法拥有者的真实类型,确定调用哪个方法。2、如何实现多态? 要实现多态,需要加一个中间层,暴露父类的方法,内部根据指针的真实类型决议方法。 C++多态的实现方法是:每个类对应一个虚方法表vtbl,子类把父类的虚方法整体拷贝一份,对于重写的虚方法进行置换,换成重写后的方法。每个类对象内有一个vptr指向本类的虚方法表,无论父类对象还是子类对象,vptr都在相同位置。也就是说,即使编译器把子类对象当成父类对象来解释,也是没有问题的,在同样位置可以找到vptr,然后调用相应的方法。3、显而易见,C++实现多态,要求每个类都有一... 阅读全文
posted @ 2013-12-24 18:54
Andy Niu
阅读(1193)
评论(0)
推荐(0)
浙公网安备 33010602011771号