如何构建类--《一个面向对象程序范例--沉思录》读后

        初学C++的心得,高手请绕道。同样初学的朋友可以配合《一个面向对象程序范例--沉思录》来看下,一起玩味。

       句柄类这东西似乎为C++而生,“C++的一个不小的讽刺是,可以用其进行面向对象编程却不能直接使用对象,而不得不借助指针和引用来实现”这是《C++ Primer》这本C++经典书籍对C++语言的一番经典评论。既然得用指针来管理继承层次中的对象,那就意味着得很小心很小心的使用 new 和 delete 来创建和销毁动态变量。这让程序员很是头疼,再NX的软件系统,在所谓的硬件陷阱面前也得战战兢兢,都是地雷啊。因而如何聪明的管理内存,在C++刚出生时就被考虑到了,当时得到的一个答案是使用句柄类,而它的另一名字就是智能指针。

       《C++沉思录》这本书,真是越看越喜欢,虽然它很老,然而钻石的光芒是不会随着时间推移而变黯淡的。其中一篇《一个面向对象程序范例》,侧重是通过一个小玩具(计算表达式打印程序)来教你如何构建句柄类。由于作者的精心策划,详细而不啰唆地推演,一个可以普遍适用的如何构建类的方法便展现在我们眼前。句柄类这东西到了java那里可能没有这许多用,但是构建类的基本方法,我想在其他面向对象语言那里一样还是可以用上的。

       概而括之地讲,解决问题的根本就是,通过抽象找到问题的本质,再经过建模对被抽了象的问题进行处理,从而得到解决方案。

       而对于抽象这个抽象概念......可以大致理解为,找到不同对象的共同点和不同点,集共同点(或部分共同点)于一身的东西就是父类,既有共同点又有不同点的东西就是子类。举个例子,对于美女和野兽这两种对象,共同点是都有毛都要吃要拉还可以繁殖后代等等;不同点是美女两条腿,野兽四条腿等等;由共同点归为一类为动物;那么动物就是父类,美女和野兽则是子类。分类就是抽象思维的一种。

       现把作者思路提取如下:

一、问题描述

       1.   实体描述

              算术表达式树

       2.   期望结果

              运行段代码(设想可能会用的代码)将会输出什么结果,如《一个面向对象程序范例--沉思录》的那段 main() 程序

二、逻辑建模

       1.   实体转化为对象

              把表达式树实体划分为“节点”和“边”两种对象

       2.   对象细分

              节点可分为三种:整数表达式节点、一元表达式节点、二元表达式节点

       3.   对象关系

              三种节点对象相互独立

       4.   对象抽象

              三种节点对象可抽象为“节点”这个概念(这不是废话,而恰是面向对象语言,通过它和继承得到多态调用的手段)

三、程序建模

       1.   创建类

              节点(抽象类):Expr_node

              整数表达式:Int_node: public Expr_node

              一元表达式:Unary_node: public Expr_node

              二元表达式:Binary_node: public Expr_node

              定义类的接口和数据。。。

       2.   模拟类实现(预判可能出现的问题)

              删除节点对象遇到麻烦,内存管理无法实现

       3.   调整抽象

              通过句柄类解决内存管理问题

       4.   完成具体实现

              逐个实现类的操作函数

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值