C++同时具有面向过程、面向对象、泛型编程的思想。面向对象有三个最重要的特点,即继承、封装、多态。
C++如同C一样,也是一种强类型语言,泛型和模板可以实现类型的泛化,提高函数的通用性和灵活型。
一定程度上,利用结构体、函数指针可以实现面向对象的思想,利用void和void*类型和强制类型转换,可以实现泛型编程思想。
1 封装性
类是数据和函数的封装,而C中,函数是代码和局部变量的封装,结构体是数据的封装,如果在函数中以结构体指针做为参数,在结构体中包括函数指针,在一定程度上可以实现封装的思想。
struct _Data; typedef void (*process)(struct _Data* pData);//函数指针 typedef struct _Data { int value; process pProcess; //结构体中包括有函数指针 }Data;2 继承性
继承本质上也是一种对象组合,而在C++中,结构体内定义其他结构体对象,一定程度上实现继承功能。
typedef struct _parent { int data_parent; }Parent; typedef struct _Child { struct _parent parent; int data_child; }Child;这里需要注意结构体定义的先后顺序。
3 多态
多态,就是说用同一的接口代码处理不同的数据。函数指针做函数参数可以实现同一个接口调用不同的函数的目的。
typedef struct _Play { void* pData; void (*start_play)(struct _Play* pPlay); }Play;比如说,这里的Play结构就是一个通用的数据结构,我们也不清楚pData是什么数据,start_play是什么处理函数?但是,我们处理的时候只要调用pPlay->start_play(pPlay)就可以了。剩下来的事情我们不需要管,因为不同的接口会有不同的函数去处理,我们只要学会调用就可以了。
4 泛型
C与C++都是强类型语言,C++有函数重载和模板的语法机制来实现泛型,C为了使用函数的通用性和灵活性,可以在函数中使用void和void*类型,以及强制类型转换。
最有代表性的就是““库中的qsort()函数了,不限具体类型和比较方式(由函数指针指向的函数具体确定):
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
base-- 指向要排序的数组的第一个元素的指针。
nitems-- 由 base 指向的数组中元素的个数。
size-- 数组中每个元素的大小,以字节为单位。
compar-- 用来比较两个元素的函数,即函数指针(回调函数)
参考:
-End-
1.《c语言中如何实现多态,接口如何实现多态?》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《c语言中如何实现多态,接口如何实现多态?》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/3219182.html