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

  • Post author:
  • Post category:其他



我们都知道封装、继承、多态是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;











版权声明:本文为ttyue_123原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。