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

本文探讨如何利用C语言的结构体和指针模拟C++中的继承和多态特性,通过实例展示了实现方法。
摘要由CSDN通过智能技术生成

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

C实现一个struct A和struct B各包含一个int成员a和b,要求达到B继承了A的效果,也就是B里面包含一个A。并且能达到多态的效果,也就是一个A*p指向A调的是A的函数,指向B调用的是B的函数。
1. 继承
(1)C++的继承
在C++中,可以用一个类(子类)去继承另一个类(父类),子类可以得到父类的相关属性与方法。
代码实现:
#include 
    
    
     
     
using namespace std;
class A
{
protected:
	int _a;
};

class B:public A
{
protected:
	int _b;
};

int main()
{
	A a;
	B b;
	return 0;
}
    
    

(2)C语言模拟继承
在C语言中,我们可以在新有的结构体里面定义已有结构体的对象,在新的结构体中通过已有类的对象的访问已有类自己的成员变量与函数。
代码实现:
//继承
typedef void(*FUNC)();
struct CA     //父类 
{
	FUNC f;  //由于语言中结构体不能包含函数,所以只能用函数指针在外面实现
	int _a;
};

struct CB      //子类
{
	CA _ca;   //在子类中定义一个父类的对象即可实现对父类的继承
	int _b;
};

2. 多态
(1)C++中的多态
在C++中,多态是通过virtual函数实现的。在父类中将其声明为虚函数,并且与子类中的方法的参数列表、返回值以及函数名相同。
//多态
class CPPA
{
public:
	virtual void f()
	{
		cout << "CPPA" << endl;
	}
protected:
	int _a;
};

class CPPB :public CPPA
{
public:
	virtual void f()      
	{
		cout << "CPPB" << endl;
	}
protected:
	int _b;
};

void func(CPPA* ptr)
{
	ptr->f();
}

int main()
{
	CPPA cppa;
	CPPB cppb;
	cppa.f();       //C++实现继承与多态
	cppb.f();
	func(&cppa);
	func(&cppb);
	return 0;
}

(2)C语言模拟实现多态
利用函数指针实现
typedef void(*FUNC)();
struct CA
{
	FUNC f;
	int _a;
};

struct CB
{
	CA _ca;
	int _b;
};

void FuncCA()
{
	cout << "CA" << endl;
}

void FuncCB()
{
	cout << "CB" << endl;
}

void func(CA* ptr)
{
	ptr->f();
}

int main()
{
	CA ca;                 //定义一个父类对象
	CB cb;                //定义一个子类对象
	ca.f = FuncCA;        //父类中的函数指针指向函数,父类的对象调用父类的同名函数
	cb._ca.f = FuncCB;    //子类通过父类的对象的函数指针指向的函数,子类的对象调用子类的同名函数
	func(&ca);            //调用父类的同名函数
	func((CA*)&cb);       //让父类指针指向子类的对象,由于类型不匹配所以要进行强转,调用子类的同名函数
	return 0;
}empty


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值