一个面向对象程序范例
- 面向对象对象编程三要素:
- 数据抽象
- 继承
- 动态绑定
适用于大型程序
以算术表达式树形表示的面向对象解决方案为例
创建和打印表达式
- 定义表达式树节点类
- 每个节点可能有一到三个子节点
- 可用一个联合加上一个指示节点类型的专门字段表示节点
三种节点:
- 包含一个整数值,无子节点
- 包含一个操作符,一个子节点
- 包含一个操作符,两个子节点
当需要用到一个类型字段时可以考虑定义一系列类并用继承组织起来能否更有效
- 用一个类表示“节点”概念
|
|
- 用继承声明具体类型
|
|
- 用句柄类管理指针避免使用者管理内存的麻烦
- 使用者关心的只是树和子树而非单个节点,定义句柄类Expr隐藏Expr_node继承层次
|
|
改进
- 可在Expr_node派生层次加入虚函数copy
- 加入引用计数避免复制下层Expr_node会更有效率
|
|
扩展新操作:表达式求值
- 方法和打印表达式相同
|
|
- 类的抽象对算术表达式进行了精确建模
- 扩展程序以计算表达式所需要增加的代码较少
扩展增加新节点类型
- 如增加Ternary_node表示三元操作符
(?:)
|
|
总结
面向对象编程能简化程序的设计和更新过程:
对下层系统中的对象进行建模
保证修改时耦合度低
《C++沉思录(Cplusplus Thinking)》笔记