单片机工程经验 - 面向对象编程及结构体的派生与继承

文章讲述了面向对象编程的概念,通过对比面向过程和面向对象的方法,解释了如何在C语言中使用结构体、函数指针和继承派生来简化代码并提高可维护性。作者给出了一个实际的游戏角色例子,展示了面向对象的优势和C语言的指针技巧应用。

面向对象

面向过程

就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

面向对象

就是把现实中的事物都抽象为“对象”。每个对象是唯一的,且都可以拥有它的属性与行为。我们就可以通过调用这些对象的方法、属性去解决问题。

举例

单说名词没有感觉,我们来个例子,假设我们在做一个游戏,我们可以控制的角色有猫咪、鱼、鸟。
其中猫咪需要4条腿走路,鱼只能在水里游,鸟需要在天上飞。这时,用户按下前进键,那么不同的角色就需要调用不同的前进函数。

角色 函数
猫咪 run()
swimming()
fly()

按照最直觉的想法,我们写一段代码

// 按键按下
void btn_press(unsigned char btn)
{
   
   
	// 按下了前进键
	if(btn == BTN_GO)
	{
   
   
		swich(roleNow)
		{
   
   
			case cat:
				run();
				break;
			case fish:
				swimming();
				break;
			case bird:
				fly();
				break;
		}
	}
}

这就是一段面向过程的代码,按下按键之后,先去判断当前选择的角色,然后根据不同的角色调用不同的前进函数。

看着好像没什么问题,也确实没什么问题,但如果角色多大100个,swich后面跟着100多个case,代码繁杂且难以维护。

下面我们试着用面向对象的方法去解决这个问题。

面向对象的解法

首先我们需要对猫咪、鱼、鸟进行抽象,我们发现这三个角色他们各自都有一个前进的函数,那么我们是否可以抽象出一个对象。

typedef struct Role 
{
   
   
	void (*go)();	
};

这里我们定义了一个结构体,其中包含了一个函数指针,指针名称叫做go(),它没有具体的实现,但却是每一个角色都有的。

然后我们将角色实例化,也就是定义几个角色

void main()
{
   
   
	struct Role cat;
	struct Role fish;
	struct Role bird;

	cat.go = run;
	fish
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝忧云枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值