用C语言实现程序的多态性

来源:计算机等级考试    发布时间:2012-08-28    计算机等级考试视频    评论


  实现:你的多态你做主
  当你真正开始着手做这个工作的时候,你会发现把数据放入链表中的操作和普通的存放 int 类型的链表的实现并没有什么大的区别,很方便。但是当你要把已经存进去的数据读取出来的时候,就有一点麻烦了。对于 void * 类型的指针,编译器只知道它里面存储了一个地址,但是关于这个地址里的数据类型,编译器是没有任何概念的。毕竟我们不能指望编译器什么都知道,什么都能替你做好,所以存进去的数据的类型,作为程序员的我们必须清楚的知道,并且在取出这个数据的时候,用这一类型的指针来对 void * 做强制类型转换。
  为了方便的做到这一点,我采取的方法是在 Node 结构体中增加一个标识数据类型的域,并用一个枚举类型来存放这些数据类型。这时的 linkList.h 如下所示:
  #ifndef LINKLIST_H
  #define LINKLIST_H
  typedef struct Node* linkList;
  enum dataType
  {
  INT,
  DOUBLE,
  CHAR,
  STRING
  };
  struct Node                        // 链表节点
  {
  void *data;                    // 存储的数据指针
  int dataType;                   // 存储数据类型
  linkList next;                  // 指向下一个链表节点
  };
  linkList initialLinklist();                // 初始化链表
  linkList newLinkList (void *data, int dataType);     // 建立新节点
  void insertFirst(linkList h, void *data, int dataType);  // 在已有链表的表头进行插入节点操作
  void linkListOutput(linkList h);             // 输出链表中数据到控制台
  #endif
  初始化链表,代码如下:
  linkList initialLinklist()
  {
  linkList link = (linkList*)malloc(sizeof(*link));
  link->data = NULL;
  link->dataType = -1;
  link->next = NULL;
  return link;
  }

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答