多态,面向接口编程等设计方法并没有绑定到任何特定的语言上,使用纯C也可以实现简单的多态概念。下面给出一个非常简单粗糙的例子,只为说明概念。
父类Animal定义
文件:animal.h
#ifndef ANIMAL_H
#define ANIMAL_H
/* 方法表, 类似于C++的虚函数表 */
typedef struct vtable vtable;
struct vtable
{
void (*eat)();
void (*bite)();
};
typedef struct Animal Animal;
struct Animal
{
const vtable* _vptr; /* 每一个对象都有一个指向虚表的指针*/
};
/*
如果不用虚表的话,每个对象都要包含所有的接口函数指针, 而实际上所有同类型对象的这些指针的值是相同的,造成内存浪费。
接口函数是和类型一对一的,而不是和对象一对一。
452




被折叠的 条评论
为什么被折叠?



