<Sixteen Ways to Stack a Cat>读后感

 

这paper以Stack a cat为例子,展示了一些基础的C++封装的技术。
对于初学C++的人来说,还是C++老手都是挺有帮助的。

2-3. 用传统C的方式定义一些函数。

4. modules
用class来封装Stack module。

5. modules with Sealed Identifiers
为了阻止客户端代码mess around with Stack Identifiers, 同时为了阻止客户端代码实例化Stack对象。
在这部分把Stack Identifier 用类来封装,同时声明stack为Stack Identifier的友类。
同时为Stack class增加一个抽象函数,从而阻止Stack Class的实例化。

6. Packages
在这部分,为Stack Class增加了两个函数,initialize()和Cleanup(),通过增加这两个函数,
为了实现对栈上分配的Stack对象的初始化和清除工作。
而Stack Class中原有的Create()和Destroy()函数的作用是为了在堆上分配Stack对象和清除工作。

7. Packages with Controlled Representations
在这部分,为了不让客户端代码能够直接分配Stack Identifier,可以把Stack Identifier Class中的构造函数和
拷贝构造函数设置为private,通过这样设置,客户端代码只能通过Stack::Create()函数来获得Stack Identifier对象。

8. Packages with Implicit Indirection
在这部分,把Stack Identifier Class的实现部分放到了另一个原文件中,从而减少了由于修改Stack Identifier Class的实现,
而导致重新编译的开销。

9. Simple Minded Types
在这部分,把Stack Class中的操作放入到Stack Indetifier Class中,接着把Stack Indetifier类命名为Stack.
不是太明白这一部分的用意。


10. types
在这部分把所有的Stack function 去Static, 同时把Create()和destory()替换成类的构造函数和析构函数。


11. types with implicit Indirection


12. multiple Representations
通过继承的作用,声明一个抽象的类Stack, 接着有多个不同的xStack继承自它。

13. Changing Operations
在这部分,介绍了一种方法,通过方法修改Virtual function table中的函数指针, 从而达到在运行时来替换原来的操作成新的操作。
修改virtual function table 中的函数指针,让指针指向新的虚函数地址。

14. Changing Representations
把一些实际操作放到Stack Indetifier中,这样当调用Stack的接口时,
可以调用到Stack Indetifier中的function,同时把Stack Indetifier设计成为
抽象基类,有多个子类继承自它,从而实现了运行时函数的改变。

15. changing the Set of Operations
在这部分, 通过函数指针的方法,把对stack操作的以下function,例如push, pop以函数指针的形式被调用,当需要调用push函数时,
在客户端代码中只需要提供函数指针的,和参数即可。通过这种方法,可以实现对实现函数的动态替换。

16.Tailoring
在这部分,提供了两种方法对15中的方法做了一些修改。

17.dynamic class
同上。


连接:
www2.research.att.com/~bs/stack_cat.pdf

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值