使用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实现继承

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

  • QmlTableView

    使用QtQuick的MVC模式新建c++类继承于QAbstractTableModel, 并实现几个重要方法: C...

  • 创建线程的方式

    1创建线程的几种方式a.继承Thread类实现多线程b.实现Runnable接口方式实现多线程c.使用Execut...

  • UML图笔记

    一、泛化: 泛化 C++实现方式:类继承 二、实现 C++实现方式:类继承,且实现了父类的接口。 三、关联 单向关...

  • 条款34:区分接口继承和实现继承

    区分接口继承和实现继承 c++的(公有)继承主要有两个意图:实现继承和接口继承。实现继承其实体现了面向对象封装的特...

  • 一些总结

    1.虽然Objective-C在语法上禁止类使用多继承,但是在协议的遵守上却允许使用多继承。所以可以用协议来实现多...

  • Kotlin学习(二)--继承,静态修饰,单例修饰,bean的写

    一.继承 java继承使用extendskotlin继承使用 : 冒号 具体情况如图: 继承与实现接口的区别: ...

  • 6 java.lang.Boolean

    1️⃣类定义 类声明的时候使用了final表示类不能被继承;实现了Serializable接口支持序列化;实现了C...

  • JavaScript进阶:组合式继承和寄生组合式继承

    1、组合式继承 组合继承了使用原型链实现对原型属性和方法的继承,同时配合使用构造函数继承实现对实例属性的继承。以免...

  • NSProxy实现伪多继承

    Objective-C是不支持多继承的,但是基于消息转发机制我们可以使用NSProxy来实现伪多继承。 1.关于N...

网友评论

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

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