C 语言的面向对象
如前所说,面向对象是一种软件设计的思想,是语言无关的。在本节中,我举一个链表(list)的例子来说明如何在 C 语言中的设计出有面向对象风格的代码。
定义接口
接口是面向对象语言中的一个比较重要的概念,接口只对外部承诺实现该接口的实体可以完成什么样的功能,但是不暴露实现的方式。这样的好处是,实现者可以在不接触接口使用者的代码的情况下,对实现进行调整。
我们来看看链表的接口定义:
清单 1. 链表的接口定义
#ifndef _ILIST_H 
#define _ILIST_H 
// 定义链表中的节点结构
typedef struct node{ 
void *data; 
struct node *next; 
}Node; 
// 定义链表结构
typedef struct list{ 
struct list *_this; 
Node *head; 
int size; 
void (*insert)(void *node);// 函数指针
void (*drop)(void *node); 
void (*clear)(); 
int (*getSize)(); 
void* (*get)(int index); 
void (*print)(); 
}List; 
void insert(void *node); 
void drop(void *node); 
void clear(); 
int getSize(); 
void* get(int index); 
void print(); 
#endif /* _ILIST_H */
IList 接口中,可以清晰的看到,对于一个 list 实体 ( 也就是对象 ) 来说,可以在其上进行 insert, drop, clear, getSize, get(index) 以及 print 等操作。
