文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>用 C 语言实现数据类型的多态性

用 C 语言实现数据类型的多态性

时间:2010-08-25  来源:Jec

    最近看了王广(中国科学技术大学,硕士研究生;现于 IBM CDL ECM IM eForms TEAM 从事自动化测试相关工作)的一篇文章,也是写关于用C语言实现的程序多态性的,觉得很好就写了下面的程序来测试。用到的最重要的东西就是空指针(void)的概念,王广说这个不应该叫做“空指针”,应该是指能指向任意类型的指针;深表赞同。

代码如下:

 

  1 /*
2 * Name: Polymorphism in C language
3 *
4 * Desc:
5 *
6 * Polymorphism in C language
7 * Author: 陈东坡 , Jesson Chan
8 * E-mail:[email protected]
9 * QQ-Num: 609646311
10 * Date: 25/Aug/10
11 * 运行环境 Fedora
12 *
13 */
14
15 #include <stdio.h>
16 #include <stdlib.h>
17 #include <string.h>
18 typedef struct NodeType{
19 void *data; //数据,类型由下面的node->dataType定
20 int dataType; //数据类型
21 }*Node ; //定义好节点类型
22
23 typedef struct DataType{
24 int num ; //编号
25 char name[19]; //姓名
26 }*Data ; //新的数据类型
27
28 void GetData(Node node,void *data,int dataType)
29 {
30 switch(dataType)
31 {
32 case 0:
33 {
34 node->data = (int*)data;
35 node->dataType = dataType;
36 break;
37 }
38 case 1:
39 {
40 node->data = (char*)data;
41 node->dataType = dataType ;
42 break;
43 }
44 case 2:
45 {
46 node->data = (char*)data;
47 node->dataType = dataType;
48 break;
49 }
50 case 3:
51 {
52 node->data = (Data)data;
53 node->dataType = dataType ;
54 break;
55 }
56 default: break;
57 }
58 }
59
60 void Printf(Node node) //输出
61 {
62 switch(node->dataType) //选择类型,依次输出
63 {
64 case 0:
65 {
66 printf("节点是一个整数:%d\n",*((int*)(node->data)));
67 break;
68 }
69 case 1:
70 {
71 printf("节点是一个字符:%c\n",*((char*)(node->data)));
72 break;
73 }
74 case 2:
75 {
76 printf("节点是一个字符串:%s\n",((char*)(node->data)));
77 break;
78 }
79 case 3:
80 {
81 Data tmpData= (Data)node->data;
82 printf("节点是一个新的类型:编号%d,姓名%s\n",tmpData->num,tmpData->name);
83 break;
84 }
85 default:break;
86 }
87 }
88 void main()
89 {
90 Node node[4]; //定义节点
91 int iData = 1024; //整型数据
92 char cData = 'H'; //字符数据
93 char sData[] = "Love"; //字符串
94 Data dData = (Data)malloc(sizeof(struct DataType)); //新类型
95 int i = 0 ;
96
97 dData->num = 54;
98 strcpy(dData->name,"JessonChan"); //新类型赋值
99
100 for(i = 0;i<4;i++) //初始化
101 {
102 node[i]= (Node)malloc(sizeof(struct NodeType));
103 node[i]->data = NULL;
104 node[i]->dataType = -1 ;
105 }
106
107 GetData(node[0],&iData,0); //数组赋值
108 GetData(node[1],&cData,1);
109 GetData(node[2],sData,2);
110 GetData(node[3],dData,3);
111
112 for(i = 0;i<4;i++) //输出
113 {
114 printf("第%d个,",i);
115 Printf(node[i]);
116 }
117
118 for(i = 0;i<4;i++) //释放,程序结束
119 {
120 free(node[i]);
121 node[i] = NULL;
122 }
123 free(dData);
124 dData = NULL;
125
126 printf("Thanks\n");
127 getchar();
128 }
129

 

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载