/* simple_cat.c */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 10 typedef struct Animal{ void *this; char name[MAX]; void (*shout)(struct Animal *); }Animal; typedef struct Cat{ Animal *animal; }Cat; void shout_cat(Animal *cat) { printf("%s miaomiao. \n", cat->name); } void visit_animal(Animal *animal) { animal->shout(animal); } void initialize_cat(Cat* cat, char *name) { cat->animal = (Animal *) malloc(sizeof(Animal)); cat->animal->this = cat; cat->animal->shout = shout_cat; strcpy(cat->animal->name, name); } void finalize_cat(Cat *cat) { free(cat->animal); } void main() { Cat cat; initialize_cat(&cat, "Kitty"); visit_animal(cat.animal); finalize_cat(&cat); }
写道
Kitty miaomiao.
Kitty cannot swim.
Kitty cannot swim.
#include <stdio.h> #include <stdlib.h> #include <string.h> //#include <conio.h> #define MAX 10 typedef struct Animal{ void *this; char name[MAX]; void (*shout)(struct Animal *); }Animal; typedef struct Swimmable{ void *this; void (*swim)(struct Swimmable *); }Swimmable; typedef struct Dog{ Animal *Animal; Swimmable *Swimmable; }Dog; typedef struct Cat{ Animal *Animal; Swimmable *Swimmable; }Cat; void shout_Cat(Animal *cat){ printf("%s miaomiao.\n", cat->name); } void swim_Cat(Swimmable *cat){ printf("%s cannot swim.\n", ((Cat *)(cat->this))->Animal->name); } void shout_Dog(Animal *dog){ printf("%s wangwang.\n", dog->name); } void swim_Dog(Swimmable *dog){ printf("%s can swim.\n", ((Dog *)(dog->this))->Animal->name); } void visit_Animal(Animal *animal){ animal->shout(animal); } void visit_Swimmable(Swimmable *swimmable){ swimmable->swim(swimmable); } void initialize_Dog(Dog* dog, char *name){ dog->Animal = (Animal *) malloc(sizeof(Animal)); dog->Animal->this = dog; dog->Animal->shout = shout_Dog; strcpy(dog->Animal->name, name); dog->Swimmable = (Swimmable *) malloc(sizeof(Swimmable)); dog->Swimmable->this = dog; dog->Swimmable->swim = swim_Dog; } void initialize_Cat(Cat* cat, char *name){ cat->Animal = (Animal *) malloc(sizeof(Animal)); cat->Animal->this = cat; cat->Animal->shout = shout_Cat; strcpy(cat->Animal->name, name); cat->Swimmable = (Swimmable *) malloc(sizeof(Swimmable)); cat->Swimmable->this = cat; cat->Swimmable->swim = swim_Cat; } void finalize_Dog(Dog *dog){ free(dog->Animal); free(dog->Swimmable); } void finalize_Cat(Cat *cat){ free(cat->Animal); free(cat->Swimmable); } void main(){ Dog dog; Cat cat; //clrscr(); initialize_Dog(&dog, "Wangcai"); initialize_Cat(&cat, "Kitty"); visit_Animal(dog.Animal); visit_Animal(cat.Animal); visit_Swimmable(dog.Swimmable); visit_Swimmable(cat.Swimmable); finalize_Dog(&dog); finalize_Cat(&cat); }
写道
Wangcai wangwang.
Kitty miaomiao.
Wangcai can swim.
Kitty cannot swim.
Kitty miaomiao.
Wangcai can swim.
Kitty cannot swim.
相关推荐
NTCIP Class A and Class C Class Profiles
用于支持对H3C云教室的安装帮助,从网络规划到虚拟化平台直至安装完成云学堂的详细步骤。 本来
eMule 0.27c Class Diagram.pdf,对eMule源代码的体系结构和类图有详细的介绍,对理解eMule的源码很有帮助
本文主要谈了一下 C语言中class和struct的区别。
U9 数据字典 Classview,最全数据字典 。
php文件上传类 UPLOAD.CLASS、在php100中文网下载 重命名等方法
使用c语言对java的class文件进行加密解密 dll的java调用
C语言day03 - class.c
全新C-class OA初始配置 全新的C-class OA基本配置步骤: 一、设置OA的静态IP地址: 1、设置下图中的Insight Display(管理显示屏)
vue点击给dom添加class然后获取含有class的dom <div class=chose-ck v-for=(item,index2) key=index2 ref=chosebox> <p>{{item.name}} <dt v-for=(item2,index) in item....'check':'' :id=item2.id :data-c
定义一个基类BaseClass,从它派生出类DerivedClass。BaseClass有成员函数fn1(),fn2(),DerivedClass也有成员函数fn1(),fn2()。在主函数中声明一个DerivedClass的对象,分别用DerivedClass的对象以及BaseClass和...
Objective-C头文件导出工具class-dump 。 Current version: 3.4 (64 bit Intel) Requires Mac OS X 10.7 or later. class-dump 3.4 (64 bit) Usage: class-dump [options] where options are: -a show instance...
介绍基于a Finite Number of Harmonics工艺的Class-E, Class-C, and Class-F Power Amplifies设计
java -agentlib:C:\classloader HelloWorld Linux、Unix等系列操作系统下执行java: java -agentlib:/home/classloader HelloWorld 应用场合: 独立的应用程序,运行java时,带上参数-agentlib:<动态库文件所在...
Brocade 4Gb SAN Switch for HP c-Class BladeSystem 安装介绍.pdf
CClass c = new CClass(className); AddClass(c); } public void AddClass(CClass httpClass) { _classList.Add(httpClass); _isDirty = true; } public void RemoveClass(CClass httpClass) { for ...
android 混淆出错 Can't process class 解决办法
系统介绍 JavaClass文件加密专家是一款针对Java应用程序Class二进制文件加密的软件,系统核心由纯C语言编写,运行效率极 高。传统的Java程序加密的方式多为代码混迹方式,但是无论多么复杂的混迹方式,...
C语言语法类编程经典代码实例C programming language syntax class example of the classic code
关于class-c vco的基础理论(一)帖子参考的论文