微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 开发中虚函数应用,大大减少开发时间

开发中虚函数应用,大大减少开发时间

时间:09-12 来源:周立功单片机 点击:

5    #define MULT_NODE  3

6

7    typedef struct _Node{

8         int type;

9         double val;

10        struct _Node *pLeft; 

11        struct _Node *pRight; 

12  }Node; 

13

14  double Calc(Node * pNode); 

15

16  #define newNumNode(val) {NUM_NODE, (val), NULL, NULL}; 

17  #define newAddNode(pLeft, pRight) {ADD_NODE, 0, (pLeft), (pRight)}; 

18  #define newMultNode(pLeft, pRight) {MULT_NODE, 0 , (pLeft), (pRight)}; 

其中,使用了名为newNumNode、newAddNode和newMultNode的宏将结构体初始化,表达式算术树接口的实现详见程序清单 4.13。

程序清单 4.13 表达式算术树接口的实现(cacltree.c)

1    #include"Node.h" 

2

3    double Calc(Node * pNode)

4    { 

5         double x = 0; 

6         switch (pNode -> type){ 

7         case NUM_NODE:

8               x = pNode -> val;

9               break; 

10        case ADD_NODE:

11             x = Calc(pNode -> pLeft) + Calc(pNode -> pRight); 

12             break; 

13        case MULT_NODE: 

14             x = Calc(pNode -> pLeft) * Calc(pNode -> pRight);

15             break; 

16        default:

17             break;

18        } 

19        return x;

20  }

表达式算术树的使用范例详见程序清单 4.14。

程序清单 4.14 表达式算术树使用范例

1    #include

2    #include "Node.h"

3

4    void main() 

5    {

6         Node node1 = newNumNode(20.0);

7         Node node2 = newNumNode(-10.0);

8         Node node3 = newAddNode(&node1, &node2);

9         Node node4 = newNumNode(0.1);

10        Node node5 = newMultNode(&node3, &node4);

11        printf("Calculating the tree\n"); 

12        double x = Calc(&node5); 

13        printf("Result:%lf\n", x); 

14  } 

2. 抽象类

根据问题的描述,需求词汇表中有一组这样的概念,比如,根结点和左右叶子结点的操作数,且加法和乘法都是二元操作。虽然词汇表对应的词汇为Node、_pLeft、_pRight、Number、Binary、Additive和Multiplicative,但用Node、_pLeft、_pRight、NumNode、BinNode、AddNode和MultNode描述表达式算术树的各个结点更准确。

由于AddNode和MultNode都是二元操作,其共性是两个数(_pLeft和_pRight)的计算,其可变性分别为加

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top