众所周知面向对象的三个特性:封装性、继承性、多态性。这几个特性的具体含义我等会会班门弄斧讲一下含义,下面,请允许我先用C++面向对象思维将设计模式中最常用的简单工厂模式写一边,相信这三个特性不言而喻。以下我将用一个工厂类实现具体汽车的生产,奔驰车、宝马车、奥迪车都将通过工厂类来生产,由父类指针指向具体的汽车实例:头文件:源代码:
C语言编译后输出:
以上便是简单工厂模式的源码示例,现在,我们来聊聊为什么用C语言我们也可以实现这面向对象思维的三大特性:
首先是封装性:C++的封装性就是将抽象类的函数和属性都封装起来,不对外开放,外部要使用这些属性和方法都必须通过一个具体实例对象去访问这些方法和属性,而我们知道,C语言中一旦包含了头文件便可以使用头文件中的函数和变量,其实C语言中也可以用一种方法达到这种效果,那便是使用结构体+函数指针+static,结构体中定义属性和函数指针,static将方法都限制在本模块使用,对外部,通过指针函数的方式访问,如此一来,便可以达到面向对象封装性的实现;
对于继承性:C++ 面向对象的继承是可以继承父类的属性和方法,在子类对象中的内存中是有父类对象的内存的,那么,用C语言来写的话我们完全可以在父类结构体中定义一个父类变量在其中,在使用构造子类的时候同时构造父类,便可以达到继承性的特性;对于多态性:C++中允许一个父类指针指向子类实体,在这个指针使用方法时,若此方法是虚函数,则执行动作会执行到具体的子类函数中,本质的实现方式是通过一个虚函数指针的方式,由于我们用C语言写面向对象本就是通过函数指针的方式来封装函数,那我们完全可以将结构体父类的变量的函数指针让他指向子类的函数来达到多态的特性。加C/C++学习交.流群,免费获取C语言、C++学习资料,学习路线指导和梳理,更有进阶干货的直播免费学习权限 ,都是大牛带飞 让你少走很多的弯路的 群...号是 961676182
好了,在你们面前班门弄斧了一番,下面开始具体的代码实现:源文件:测试文件main.cpp编译后执行:
以上的结果可以看出,我们的测试代码接口都是一样的,效果达到了C++面向对象的设计理念,用C语言完成了一次狠狠的逆袭,希望大家在你们的项目工程中有帮助。
其实程序员的工作大部分是写代码,但是代码的阅读对象往往并不是我们自己,将我们的思维写进去才是一个程序员的境界,不要简单的根据流程去写一个代码,否则,程序员就真的只是一个工具了;
哦,BTW,在函数中使用了本结构体的指针在里面,是为了达到在函数中使用示例的属性,这样就独立每一个示例的属性操作了。
黄裕玲:制作游戏很简单,基于 C++/Qt 开发的 2048 游戏zhuanlan.zhihu.com