c++函数为什么带imp_一文带你轻松掌握多种C++编程范式

本文探讨了C++编程中的不同范式,包括结构化、基于对象、面向对象和基于接口的设计。通过加法器的例子,解释了每种范式的优缺点,特别是封装和代码封闭的概念。最后,介绍了基于接口编程的模板实现,展示了如何使用模板实现多态和封装变化点。
摘要由CSDN通过智能技术生成

(给CPP开发者加星标,提升C/C++技能)

来源:神技圈子https://blog.csdn.net/songguangfan/article/details/110929508

前言

编程范式有多种,主要有结构化的程序设计思想、对于对象的程序设计思想、面向对象的程序设计思想、基于接口的程序设计思想。那么这些范式各是什么意思呢?别着急,我们通过一个加法器的例子来逐一说明。

结构化程序的设计

我们来实现一个加法器,在这个加法器中已经保存了被加数,现在需要传递加数到加法器。如果你是一个C语言开发,第一反应多半是,这个很简单啊,用一个结构体来保存被加数,然后再外带一个加法函数就行了啊cfe9b8a331274430d1f770da42f261b8.png

代码中,结构体Augend保存了加法器的被加数,具体而言,就是由iAugend保存,第9至12行给出了加法函数的定义。该函数接收两个参数,一是Augend结构体的指针,二是加数iAddend。


但这个时候老板来了,他对你说,这个加法器要修改一下,现在需要给被加数添加一个权重值,而且以前的加法器要保留,因为还有一部分代码要保留它。没办法,拿人家的手短,吃人家的嘴软,继续当“码农”吧。既然有一部分代码要用到老的加法器,那么老的加法器我们还是保留的,这样一来,就可以按照新的思路来开发新的加法器了,具体的方法如下76f1454ded8b054c8419c3119fe8d2b8.png可以看到代码思路同上一个代码是完全一致的,不同的只是结构体和函数名称。很显然,WeightAugend保存了被加数和权重,而WeightAdd则是带权重的加法函数。好了,现在我们分析一下按照结构化程序设计思想实现的加法器有什么缺陷?学过面向对象的肯定会一口就能说出来,数据和操作这个数据的函数或方法没有封装在一起。确切一点就是,这个加法器没有把被加数、权重以及操作它们的加法运算封装在一起。另外一个缺陷是什么呢?因为引入带权重的加法器之后,需要对部分老代码进行修改,显然没有做到代码封闭,即没有实现这一变化点的封装。

基于对象的程序设计

在对象的世界,任何东西都可以被当成对象。那么按照这个说法,我们需要实现的这个加法器,显然也是个对象了。用过C++的同学第一反应肯定就是编写一个加法器的类,用一个数据成员保存被加数,然后再写一个public的加法方法就好了。一般就写成如下这样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值