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

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

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

  typedef struct _MultNode{ 

26        BinNode   isa; 

27  }MultNode; 

28

29  NumNode * newNumNode(double num); 

30  double node_calc(Node *pThis);

31  AddNode * newAddNode(Node *pLeft, Node *pRight); 

32  MultNode * newMultNode(Node *pLeft, Node *pRight); 

33  void node_cleanup(Node *pThis);

实现表达式算术树的第一步是输入数据和初始化NumNode结构体的变量isa和_num,newNumNode()函数原型如下:

NumNode * newNumNode(double num); 

其调用形式如下:

Node * pNode1 = (Node *)newNumNode(20.0); 

Node * pNode2 = (Node *)newNumNode(-10.0);

接下来开始为计算做准备,node_calc()函数原型如下:

double node_calc(Node *pThis);

其调用形式如下:

node_calc(pNode1);

然后开始进行加法运算,newAddNode()函数原型如下:

AddNode * newAddNode(Node *pLeft, Node *pRight); 

其调用形式如下:

Node * pNode3 = (Node *)newAddNode(pNode1, pNode2);

当然,也可以开始进行乘法运算了,newMultNode()函数原型如下:

MultNode * newMultNode(Node *pLeft, Node *pRight); 

其调用形式如下:

Node * pNode4 = (Node *)newNumNode(0.1);

Node * pNode5 = (Node *)newMultNode(pNode3, pNode4); 

一切准备就绪,则计算最终结果并释放不再使用的资源,node_cleanup()函数原型如下:

void node_cleanup(Node *pThis);

其调用形式如下:

printf("Calculating the tree\n");  

double x = node_calc(pNode5);

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

node_cleanup(pNode5);

4. 实现接口

显然,为每个结点创建了相应的类后,就可以为每个结点创建一个动态变量,即可在运行时根据需要使用malloc()分配内存并使用指针存储该地址,并使用指针初始化结构体的各个成员,CalcTree1.c接口的实现详见程序清单 4.16。

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

1    #include

2    #include  

3    #include " CalcTree1.h " 

4

5    NumNode * newNumNode(double num) 

6    { 

7          NumNode *pNumNode = malloc(sizeof(NumNode));

8         if(pNumNode != NULL){

9               pNumNode -> isa.node_calc = _numnode_calc;

10              pNumNode -> isa.node_cleanup = _numnode_cleanup; 

11              pNumNode -> _num = num;

12        } 

13        return pNumNode;

14  } 

15

16  static double _numnode_calc(Node *pThis) 

17  { 

18        printf("numeric node %lf\n", ((NumNode *) pThis) -> _num); 

19        return ((NumNode *)pThis) -> _num; 

20  } 

21

22  static void _numnode_cleanup(Node *pThis)

23  {

24        printf("NumNode cleanup\n");

25        free(pThis); 

26  }

27

28  double node_calc(Node *pThis) 

29  {

30        return pThis -> node_calc(pThis);

31  }

32

33  AddNode * newAddNode(Node *pLeft, Node *pRight)

34  {

35        AddNode *pAddNode = malloc(sizeof(AddNode)); 

36        if(pAddNode != NULL){ 

37              pAddNode -> 37              pAddNode -> isa.is

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

网站地图

Top