`

c class

阅读更多
/* 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.

 

 

#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.

 

分享到:
评论

相关推荐

    NTCIP Class A and Class C Class Profiles

    ### NTCIP Class A 和 Class C 类别简介 #### 一、引言 《NTCIP Class A and Class C Class Profiles》是美国州际公路与运输官员协会(AASHTO)、交通工程师学会(ITE)及国家电气制造商协会(NEMA)联合发布的...

    h3c class help

    用于支持对H3C云教室的安装帮助,从网络规划到虚拟化平台直至安装完成云学堂的详细步骤。 本来

    C语言中class和struct有啥区别

    本文主要谈了一下 C语言中class和struct的区别。

    U9 数据字典 Classview

    U9 数据字典 Classview,最全数据字典 。

    c语言对java的class文件进行加密解密

    在实际应用中,我们需要结合C语言的加密算法和Java的JNI接口,编写相应的Java代理和C函数,以便在JVM启动时加载并解密.class文件。 总的来说,这个技术组合涉及到多层安全措施,从代码的存储安全(加密)到运行时的...

    php文件上传类,UPLOAD.CCLASS

    php文件上传类 UPLOAD.CLASS、在php100中文网下载 重命名等方法

    cClass:Terraria插件

    《cClass:Terraria插件开发详解》 在游戏编程领域,Terraria是一款深受玩家喜爱的沙盒式冒险游戏,而cClass则是针对这款游戏的插件开发框架,它允许开发者通过C#语言来扩展游戏的功能,提升玩家的游戏体验。本文将...

    Java中通过Class类获取Class对象的方法详解

    Class c = p.getClass(); ``` 这种方式需要先创建一个对象,然后通过getClass()方法获取Class对象。 方式2:通过类名.class获取Class对象 通过类名.class可以获取Class对象,例如: ```java Class c2 = Person....

    C语言day03 - class.c

    C语言day03 - class.c

    vue如何判断dom的class

    vue点击给dom添加class然后获取含有class的dom &lt;div class=chose-ck v-for=(item,index2) key=index2 ref=chosebox&gt; &lt;p&gt;{{item.name}} &lt;dt v-for=(item2,index) in item....'check':'' :id=item2.id :data-c

    Class-C Harmonic CMOS VCOs with a General Result on Phase Noise.pdf

    该振荡器采用class-C工作模式的核心晶体管,与标准差分对LC谐振振荡器相比,在相同的电流消耗下实现了理论上的3.9dB相位噪声改善。此外,该拓扑自然排斥尾偏置电流噪声,并且不存在对杂散电容敏感的寄生节点,从而...

    Class-E, Class-C, and Class-F Power Amplifies Base Upon a Finite Number of Harmonics

    ### 基于有限谐波数量的Class-E、Class-C及Class-F功率放大器 #### 概述 本文深入探讨了在超高频(UHF)和微波频率下实现Class-E功率放大器(PA)的方法,该方法通过传输线网络提供理想的Class-E功率放大器所需的...

    么把.class文件反编译成.java 经修改后再编译成.class

    c:/java/&gt;jad example1.class 这将将 example1.class 反编译成 example1.jad。将 example1.jad 改为 example1.java 即得源文件。 三、JAD 反编译工具的高级用法 JAD 反编译工具提供了多种高级用法,可以满足不同...

    cg2_基类BaseClass派生出类_noddedc1c_

    定义一个基类BaseClass,从它派生出类DerivedClass。BaseClass有成员函数fn1(),fn2(),DerivedClass也有成员函数fn1(),fn2()。在主函数中声明一个DerivedClass的对象,分别用DerivedClass的对象以及BaseClass和...

    class-dump-z全平台版本(linux、iPhone、Windows)

    其中,`class-dump-z` 是一款广受欢迎的工具,尤其在iOS开发中,用于提取Objective-C类信息和方法。而今天我们要讨论的是它的全平台版本,包括Linux、iPhone和Windows,这大大扩展了其适用范围。 `class-dump-z` 的...

    详解TypeScript+Vue 插件 vue-class-component的使用总结

    npm install vue-class-component vue-property-decorator --save-dev 一梭子直接干; 其次,咱来说说它们的区别与联系: vue-property-decorator社区出品;vue-class-component官方出品 vue-class-component提供了...

    Brocade 4Gb SAN Switch for HP c-Class BladeSystem 安装介绍.pdf

    《Brocade 4Gb SAN Switch for HP c-Class BladeSystem安装指南》 Brocade 4Gb SAN Switch是一款专为HP c-Class BladeSystem设计的四千兆光纤通道交换机模块,适用于高密度、高性能的存储区域网络(SAN)环境。此...

    Objective-C头文件导出工具class-dump

    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...

    class-dump-3.5

    《class-dump-3.5:深入探索Objective-C类信息》 在iOS和macOS的开发中,Objective-C作为主要的编程语言之一,其强大的动态性使得开发者能够灵活地处理类和对象。然而,这种灵活性有时也会带来调试的挑战。这时,一...

    The Class-I Amplifier

    本文详细介绍了一类名为Class-I的放大器,它是Crown公司的一项专利技术,也被称为BCA(平衡电流放大器)。这项技术与以往的放大器设计相比,以更少的损耗提供更大的功率输出,因而具有更高的效率。Class-I技术能带来...

Global site tag (gtag.js) - Google Analytics