C语言模拟实现C++中的继承和多态

本文探讨了C++的继承和多态特性,并展示了如何在C语言中使用结构体和函数指针模拟这些特性。通过实例代码,解释了如何在C语言中实现类的继承以及通过函数指针实现多态性。

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

继承与多态的概念 
继承:是面向对象最显著的特点,继承是从已有类派生出新的类,新的类继承了已有类的数据和行为, 并能扩展新的能力,已有类被称为父类/基类,新的类称为子类/派生类;


多态:按字面意思就是“多种形态”,在面向对象语言中,接口的多种不同实现方式,即为多态, 同一操作用于不同的对象可以有不同的解释,产生不同的结果,这就是多态性,简单来说,就是允许基类 指针指向父类;


封装、继承、多态 是C++三大特性,而C语言不具有的,在C++中用class类实现了这三大特性,但是在C语言中可以用struct结构体来模拟实现C++的继承和多态。
#include<iostream>
using namespace std;

//C++中的继承与多态
struct A
{
	virtual void Fun()    //C++中的多态:通过虚函数实现
	{
		cout << "A:Fun()" << endl;
	}

	int a;
};
struct B :public A         //C++中的继承:B类公有继承A类
{
	virtual void Fun()    //C++中的多态:通过虚函数实现(子类的关键字virtual可加可不加)
	{
		cout << "B:Fun()" << endl;
	}

	int b;
};


//C语言模拟实现的继承和多态
typedef void(*fun)();//C语言结构体中不能包含成员函数,所以在结构体外定义函数指针
struct AA
{
	fun _fun;
	int _a;
};

struct BB
{
	AA a;//定义AA结构体对象实现继承
	int _b;
};

void funA()
{
	cout << "A:_funA()" << endl;
}

void funB()
{
	cout << "B:_funB()" << endl;
}



void Test1()
{
	//测试C++中的继承与多态
	A a;    //定义一个父类对象a
	B b;    //定义一个子类对象b

	A* p1 = &a;   //定义一个父类指针指向父类的对象
	p1->Fun();    //调用父类的同名函数
	p1 = &b;      //让父类指针指向子类的对象
	p1->Fun();    //调用子类的同名函数

	//测试C语言模拟实现的继承与多态
	AA aa;
	BB bb;
	aa._fun = funA;
	bb.a._fun = funB;

	AA *p = &aa;//定义AA的对象指针
	p->_fun();
	p = (AA*)&bb;//父类指针指向子类对象
	p->_fun();//实现多态
}

int main()
{
	Test1();
	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值