第三阶段要求对程序进行扩展,可供选择的方向很多,经过我们两人的讨论后决定选择第四个方向:
- 选一个你从来没有学过的编程语言,试一试实现基本功能。
估计做好这个软件需要的时间,并且写出大概的设计步骤和实现算法。
(1)、语言选择:
因为我们都还没学过面向对象的程序设计语言,所以打算运用C++来试一试实现这个程序;
(2)、时间估计:
C++语法与C类似,所以在原有程序的基础上,应该能在8小时内完成这个新程序
(3)、设计步骤:
首先,我们了解了一下C++与C的主要区别:
- C是面向过程的语言,而C++是面向对象的语言;
- C和C++动态管理内存的方法不一样,C是使用malloc/free函数,而C++除此之外还有new/delete关键字;
- C中的struct和C++的类,C++的类是C所没有的,但是C中的struct是可以在C++中正常使用的,并且C++对struct进行了进一步的扩展,使struct在C++中可以和class一样当做类使用,而唯一和class不同的地方在于struct的成员默认访问修饰符是public,而class默认的是private;
- C++支持函数重载,而C不支持函数重载,而C++支持重载的依仗就在于C++的名字修饰与C不同,例如在C++中函数int fun(int ,int)经过名字修饰之后变为 _fun_int_int ,而C是 _fun,一般是这样的,所以C++才会支持不同的参数调用不同的函数;
- C++中有引用,而C没有;
- C++全部变量的默认链接属性是外链接,而C是内连接;
- C 中用const修饰的变量不可以用在定义数组时的大小,但是C++用const修饰的变量可以;
- 局部变量的声明规则不同,多态,C++特有输入输出流之类等
- ……
设计思路与前面类似,函数所实现的功能相同,只是多了创建不同的类
(4)、代码说明:
函数类
class Equation{ public: Equation(){ power=lab=0; } ~Equation(){ } bool power; int lab; string str; //表达式 void create(string &str); void infix_to_suffix(string &infix,string &suffix); double suffix_value(string suffix); void float_to_fraction(double x); };
表达式类
class Create{ public: Create(){ x=y=z=w=bracket=len=0; b_flag=1; } int x; //被操作数 int y; //操作数 int z; //运算符 + - * / ^ int w; //运算符+ - int bracket; //括号 int b_flag; int len; //表达式长度 };
其余函数的功能与C语言版本类似,不再做具体说明。