小猫与小狗
2007-08-14 13:33
120 查看
dog.h
注:狗的结构体是继承了动物的结构体,当然也在这里定义了狗的动作(叫)这个类型
#ifndef DOG_H__
#define DOG_H__
#include "animal.h"
typedef struct dog_t Cdog ;
struct dog_t...{
Canimal super;
};
typedef struct...{
void (* bark)(Cdog *this);
}dog_vmt;
void dog_Init(Cdog* this);
void dog_Bark(Cdog* this);
#endif
dog.c
狗叫的实体函数付值
在初始化的时候将狗的动作付给狗实体,也就是传入
#include "dog.h"
#include <stdio.h>
static const dog_vmt vmt = ...{dog_Bark};
void dog_Init(Cdog* this)...{
animal_Init(this);
this->super.vmt = (const animal_VMT*)&vmt;
}
void dog_Bark(Cdog* this)...{
// fprinf(stdout, "wangwang ");
}
cat.h
#ifndef CAT_H__
#define CAT_H__
#include "animal.h"
typedef struct cat_t Ccat;
typedef struct cat_t...{
Canimal super;
};
typedef struct ...{
void (*bark)(Ccat* this);
}cat_vmt;
void cat_Init(Ccat* this);
void cat_Bark(Ccat* this);
#endif
cat.c
#include "cat.h"
#include <stdio.h>
static const cat_vmt vmt = ...{ cat_Bark };
void cat_Init(Ccat* this)...{
animal_Init(this);
this->super.vmt = (const animal_VMT*)&vmt;
}
void cat_Bark(Ccat* this)...{
fprintf(stdout, "miaomiao ");
}
animal.h
#ifndef ANIMAL_H__
#define ANIMAL_H__
typedef struct animal_t Canimal;
typedef struct ...{
void (*bark)(Canimal* this);
}animal_VMT;
struct animal_t...{
animal_VMT* vmt;
};
void animal_Init(Canimal* this);
void animal_Bark(Canimal* this);
#define animal_Bark(this)
(((Canimal*)(this))->vmt->bark((Canimal*)this))
#endif
animal.c
#include "animal.h"
void animal_Init(Canimal* this)...{
}
main.c
#include "dog.h"
#include "cat.h"
#include "animal.h"
int main()...{
Ccat neko;
Cdog yinu;
dog_Init((Canimal*)&yinu);
cat_Init((Canimal*)&neko);
animal_Bark((Canimal*)&neko);
animal_Bark((Canimal*)&yinu);
return 0;
}
注:狗的结构体是继承了动物的结构体,当然也在这里定义了狗的动作(叫)这个类型
#ifndef DOG_H__
#define DOG_H__
#include "animal.h"
typedef struct dog_t Cdog ;
struct dog_t...{
Canimal super;
};
typedef struct...{
void (* bark)(Cdog *this);
}dog_vmt;
void dog_Init(Cdog* this);
void dog_Bark(Cdog* this);
#endif
dog.c
狗叫的实体函数付值
在初始化的时候将狗的动作付给狗实体,也就是传入
#include "dog.h"
#include <stdio.h>
static const dog_vmt vmt = ...{dog_Bark};
void dog_Init(Cdog* this)...{
animal_Init(this);
this->super.vmt = (const animal_VMT*)&vmt;
}
void dog_Bark(Cdog* this)...{
// fprinf(stdout, "wangwang ");
}
cat.h
#ifndef CAT_H__
#define CAT_H__
#include "animal.h"
typedef struct cat_t Ccat;
typedef struct cat_t...{
Canimal super;
};
typedef struct ...{
void (*bark)(Ccat* this);
}cat_vmt;
void cat_Init(Ccat* this);
void cat_Bark(Ccat* this);
#endif
cat.c
#include "cat.h"
#include <stdio.h>
static const cat_vmt vmt = ...{ cat_Bark };
void cat_Init(Ccat* this)...{
animal_Init(this);
this->super.vmt = (const animal_VMT*)&vmt;
}
void cat_Bark(Ccat* this)...{
fprintf(stdout, "miaomiao ");
}
animal.h
#ifndef ANIMAL_H__
#define ANIMAL_H__
typedef struct animal_t Canimal;
typedef struct ...{
void (*bark)(Canimal* this);
}animal_VMT;
struct animal_t...{
animal_VMT* vmt;
};
void animal_Init(Canimal* this);
void animal_Bark(Canimal* this);
#define animal_Bark(this)
(((Canimal*)(this))->vmt->bark((Canimal*)this))
#endif
animal.c
#include "animal.h"
void animal_Init(Canimal* this)...{
}
main.c
#include "dog.h"
#include "cat.h"
#include "animal.h"
int main()...{
Ccat neko;
Cdog yinu;
dog_Init((Canimal*)&yinu);
cat_Init((Canimal*)&neko);
animal_Bark((Canimal*)&neko);
animal_Bark((Canimal*)&yinu);
return 0;
}
相关文章推荐
- [小猫学NA]CCNA学习指南第一章笔记
- (匈牙利算法) 小狗散步
- DotA召唤师改键:卡尔智能改键(正式版) By 小猫 ----更新主页
- struts2中的JSON插件中的一个小猫腻
- 修改tomcat小猫图标
- 通向架构师的道路(第四天)之Tomcat性能调优-让小猫飞奔
- 每个QQ都可领取30-100QB。 骗你小狗 utr7t(千万不要点进去,腾讯出漏洞了)
- 通向架构师的道路(第四天)之Tomcat性能调优-让小猫飞奔(暂时忽略)
- MC新手入门(四十二)------ 愤怒小狗制作三
- 纪念小猫King
- 通向架构师的道路(第四天)之Tomcat性能调优-让小猫飞奔
- 通向架构师的道路(第四天)之Tomcat性能调优-让小猫飞奔
- 我的第一款Cocos2d 游戏小狗快跑基本完成
- 通向架构师的道路(第四天)之Tomcat性能调优-让小猫飞奔
- 通向架构师的道路(第四天)之Tomcat性能调优-让小猫飞奔 .
- 通向架构师的道路(第四天)之Tomcat性能调优-让小猫飞奔
- 小猫怎么看辣妈花百万为女庆生
- 小猫统计——根据Excel文件或者文本文件自动建表
- 小猫统计——导入通达信日K线数据
- 点击eclipse中的小猫启动项目