使用C实现继承

作者: NiceBlueChai | 来源:发表于2017-10-13 08:12 被阅读40次

    为简化起见类操作将不涉及开辟和释放空间,从而可以舍弃构造和析构函数。将精力集中在继承。

    基类

    Base.h

    #pragma once
    
    //Base.h
    typedef struct Base//模拟基类
    {
        int m_val;//模拟成员变量
    
    }Base;
    int Base_Fun(Base* bs); //模拟成员函数
    

    Base.c

    //Base.c
    #include "Base.h"
    #include <stdio.h>
    int Base_Fun(Base* bs)
    {
        printf("Base fun out put:my val is %d\n",bs->m_val);//打印基类成员变量的值
        return 0;
    }
    

    派生类

    Derive.h
    派生类必须有一个继承类的成员,用于表示它是继承自它的。这里DERIVE是一个空宏,用于表示这个成员是一个继承的基类。这样写是便于理解。

    //Derive.h
    #pragma once
    #define DERIVE              //空宏
    #include "Base.h"//引用基类
    
    //Derive.h
    typedef struct Derive   //模拟派生类
    {
        DERIVE Base m_base; //继承成员
        int m_val;  //模拟成员,可以同名
    }Derive;
    int Derive_Fun(Derive* dv); //模拟成员函数
    

    Derive.c

    #include "Derive.h"
    #include<stdio.h>
    /*这个宏称为继承描述表,每个表项是一个相应继承层的结构体的引用。
    因为我们是自己实现继承,所以需要这样显式地指明所有继承关系。
    可以三重或者多重继承,有几重继承这里就需要有多少个表项。*/
    #define  DERIVE_BASE (dv->m_base)
    
    Derive_Fun(Derive* dv)
    {
        printf("Derive fun out put is: %d\n", dv->m_val);//打印派生类的成员变量
    
        //打印基类的成员变量,两种都可以,但一般通过宏定义,就是通过上面定义的继承描述表来找。
        printf("The Derive' Base fun out put is: %d\n ", dv->m_base.m_val);//多重继承时不宜采用此方法
        printf("The Derive' Base fun out put is: %02X\n ", DERIVE_BASE.m_val);//一般采用此方法,
    
        return 0;
    }
    

    这样在主函数中就能很方便地调用继承类了

    main.c

    #include "Derive.h"
    #include<stdio.h>
    /*这个宏称为继承描述表,每个表项是一个相应继承层的结构体的引用。
    因为我们是自己实现继承,所以需要这样显式地指明所有继承关系。
    可以三重或者多重继承,有几重继承这里就需要有多少个表项。*/
    #define  DERIVE_BASE (dv->m_base)
    
    Derive_Fun(Derive* dv)
    {
        printf("Derive fun out put is: %d\n", dv->m_val);//打印派生类的成员变量
    
        //打印基类的成员变量,两种都可以,但一般通过宏定义,就是通过上面定义的继承描述表来找。
        printf("The Derive' Base fun out put is: %d\n ", dv->m_base.m_val);//多重继承时不宜采用此方法
        printf("The Derive' Base fun out put is: %02X\n ", DERIVE_BASE.m_val);//一般采用此方法,
    
        return 0;
    }
    

    ❤️


    相关文章

      网友评论

        本文标题:使用C实现继承

        本文链接:https://www.haomeiwen.com/subject/pulayxtx.html