C语言模式实现C++继承和多态

本文介绍如何在C语言中模拟C++的继承和多态特性。通过定义结构体并使用函数指针,实现了基类和派生类的概念,并通过基类指针调用不同函数的方式展现了多态效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C实现一个struct A和struct B各包含一个int成员a和b,要求达到B继承了A的效果,也就是B里面包含一个A。并且能达到多态的效果,也就是一个A*p指向A调的是A的函数,指向B调用的是B的函数

何为继承 ?
定义:在C++中所谓的继承就是在一个已存在的类的基础上建立一个新的类。已存在的类称为“基类”或者“父类”,新建立的类称为“派生类”或者“子类”,一个新类从已有的类那里获得其已有特性,这种现象称为类的继承,类的继承是用已有的类来建立专用类的编程技术。
优点: a) 代码复用
b) 提高程序的可扩展性
特点: a) 传递性
b) 单根性:一个类只能有一个父类但可以有多个子类
c) 相对性:描述一个类时应该说类A相对于类B是子类或父类,而不能简单的定义类A是子类或父类
何为多态?
多态就是向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(方法);
例如:使用运算符“+”使两个数值相加,就是发送一个消息,他要调用operator+函数,实际上,整型,单精度型,双精度型的加法操作过程是互相不同的,是由不同内容的函数实现的。很明显,它们是通过不同的方法来响应同一消息。
在C++中,多态的表现形式之一是:具有不同功能的函数可以用同一个函数名,这样就可以实现用一个函数名调用不同内容的函数。总而言之,多态就是“一个接口,多种方法”。
实现多态的条件:
1:派生类重写基类虚函数
2:通过基类指针或引用调用基类虚函数(该虚函数在派生类中必须被重写)

//c++
class base
{
public:
    virtual void fun()//虚函数
    {
        cout << "base:;fun()" <<endl;
    }
};
class derived :public base
{
public:
    virtual void fun()
    {
        cout << "derived::fun()" << endl;
    }
};
void test()
{
    base b;//基类对象
    derived d;//派生类对象
    base* pb = &b;//父类指针指向父类对象
    pb->fun();//调用base::fun()
    pb = &d;//父类指针指向派生类对象
    pb->fun();//调用derived::fun()
}

这里写图片描述

//C
typedef void(*fun)();//重定义一个函数指针类型

基类
struct base
{
    fun b;
};

派生类
struct derived
{
    base d;//在派生类中定义一个基类的对象即可实现对基类的继承
};


void funb()
{
    printf("base::fun()\n");
}
void fund()
{
    printf( "derived::fun()\n");
}

void test()
{
    base _b;//基类对象
    derived _d;//派生类对象

    _b.b = funb;//基类对象调用基类同名函数
    _d.d.b = fund;//派生类调用派生类的同名函数

    base *pb = &_b;//基类指针指向基类对象
    pb->b();

    pb = (base *)&_d;//让基类指针指向派生类的对象,类型不同必须进行强转
    pb->b();

}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值