C++语言程序设计

11.6.2 算术表达式实例
一、分析
x
2x+3
(2(x-2)(x+1)2+3)/x
(2(x-2)(x+1)+3)/sin(x)
从上面的例子可以看到，算术表达式是有数值、变量、各种运算组合而成的。它们可以分解为以下几种简单的形式：
数字：1、2、4等
变量：x
数学函数：函数参数可以是一个任意表达式,例如sin(x3)
加法运算：把任意两个表达式加在一起，例如：2x+3
减法运算：将一个表达式减去另外一个表达式，例如：x-2
乘法运算：把任意两个表达式相乘，例如：(x-2)(x+1)
除法运算：把一个表达式除以另一个表达式，例如：(x+1)+3)/x
乘方运算：乘方也可以是一个任意的表达式，例如：(x-3)(x-7)
一个数或一个变量是最简单的算术表达式。通过运算符将多个算术表达式连接，就能组成新的算术表达式，函数可以看作特殊的运算符，它有一个操作数，而+、-、*、/均是二元运算符。
我们可以按照不同的运算符构造类，定义一个value()成员函数，实现各个表达式的求值。然而，对于参与运算的表达式，我们并不知道它们各自的具体形式，当然也不可能知道它们的值是怎样计算出来的。那我们怎么能仅仅通过调用一个求值函数value()就得到这个表达式的值呢？这需要利用类多态的特性：将每个运算符类的求值函数value()定义成虚函数，这样，当需要得到表达式的值的时候，我们只需要调用value()函数，而不需要知道它是调用了加法类的value()，还是减法类的value()。为此，我们要定义一个表达式类作为基类。这个表达式类，只要定义一个求值的纯虚函数，也不需要数据成员。不同的运算符类从这个基类派生，分别实现这个value()函数，各个运算符的参数是表达式类的指针，它们被定义为该运算符类的数据成员。
二、各个类的定义
三、应用