c语言实现多态的原理
- 核心 基于函数指针,用结构体进行封装
例子(教程上的,还不错)
#include "stdafx.h"
#include <iostream>
typedef void(TIPS_FUNC)(void);
//抽象类
struct tips
{
char from[64]; //锦囊是谁写的
char to[64]; //写给谁的
TIPS_FUNC *fp; //具体锦囊的内容
};
//架构函数
void open_tips(struct tips* tp)
{
printf("打开了锦囊\n");
printf("此锦囊是由%s写给%s\n", tp->from, tp->to);
printf("内容是:");
tp->fp();
}
//具体实现
void tips_1(void)
{
printf("一到东吴就找乔国老\n");
}
void tips_2(void)
{
printf("骗刘备 操作压境\n");
}
void tips_3(void)
{
printf("找孙尚香求救\n");
}
//子类
struct tips* creat_tips(const char* from, const char* to, TIPS_FUNC*fp)
{
struct tips* tp = (struct tips*)malloc(sizeof(struct tips));
strcpy_s(tp->from, strlen(from)+1 ,from);
strcpy_s(tp->to, strlen(to) + 1,to);
tp->fp = fp;
return tp;
}
void destroy_tips(struct tips* tp)
{
if (tp != NULL)
{
free(tp);
}
}
int main()
{
struct tips* tp1 = creat_tips("孔明","赵云", tips_1); //子类地址赋值父类指针
struct tips* tp2 = creat_tips("孔明", "赵云", tips_2);
struct tips* tp3 = creat_tips("孔明", "赵云", tips_3);
//业务 调用架构函数
printf("刚来到 东吴境内 ,打开了第一个锦囊\n");
open_tips(tp1);
printf("-------------------------\n\n\n");
printf("刘备乐不思蜀 ,打开第二个锦囊\n");
open_tips(tp2);
printf("-------------------------\n\n\n");
printf("孙权追杀刘备, 打开第三个锦囊\n");
open_tips(tp3);
destroy_tips(tp1);
destroy_tips(tp2);
destroy_tips(tp3);
return 0;
}