您的位置:首页 > 编程语言 > C语言/C++

C语言是怎样实现封装、继承、多态的?

2016-09-07 10:55 579 查看
       我们都知道封装、继承、多态是c++面向对象中的基本特征。C语言是面向过程的语言,自身没有这些特性,那如何使用C语言来模拟C++的封装、继承、多态等面向对象的基本特征。下面就要讨论一下封装、继承、多态等面向对象在c语言中是如何实现的。

一、封装

     封装:C++中的封装是利用public,protected、private来进行实现的,来隐藏一些不想让别人能够看到的一些东西,只留一些接口给用户进行使用,C语言中有结构体(struct),可以实现封装和隐藏。

     为了隐藏一个类的具体实现,一般是一个公开的头文件,一个私有头文件,私有头文件中定义实现的细节,公开头文件中定义开放给客户和其他程序员的接口和公共数据。封装性的意义在于,函数和数据是绑在一起的,数据和数据是绑在一起的。这样就可以通过简单的一个结构指针访问到所有的数据,遍历所有的函数。

struct _Data;
typedef void (*process)(struct _Data* pData);   //结构体指针

typedef struct _Data    //数据和数据进行绑定
{
int value;
process pProcess;
}Data;


二、继承

     C++的继承主要是可以在基类的基础上能够增添新有的功能,子类可以拥有父类的所有行为,同时也能够将原有的行为进行更改,在设计C语言继承性的时候,我们需要做的就是把基础数据放在继承的结构的首位置即可。这样数据的访问就不会存在问题。

typedef struct _parent           //基础数据
{
int data_parent;
}Parent;

typedef struct _Child
{
struct _parent parent;      //基础数据放于继承结构的首位置
int data_child;
}Child;


三、多态

     多态,就是说用同一的接口代码处理不同的数据。比如说,一个通用的结构也不清楚是什么数据,什么类型的处理函数?我们在处理时只需要调用函数就可以了,剩下的事情我们不需要管,因为不同的接口会有不同的函数去处理。

typedef struct _play
{
void* pData; //未知类型的数据
void (*start_play)(struct _play* pPlay);
}Play;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 继承 多态 封装