C语言是如何体现面向对象的?

来源:互联网 发布:彩田内衣淘宝店 编辑:程序博客网 时间:2024/06/07 05:42

             C语言是一个面向过程的程序设计语言,但是也存在一些面向对象的机制。面向对象的三个基本特征是封装、继承和多态。

       ① 继承:

       C++可以通过类来进行继承,而C语言的继承则是通过结构体来实现的。一般有两种方法:一个是声明在结构体内,另一种是声明在结构体外。

下面是声明在结构体中的例子

typedef struct parent{    int x;}Parent;
typedef struct child{    Parent father;//继承自父类,必须要放在前面    int y;}children;

       上例中,父类的实现方法定义在一个结构体中,子类需要继承父类则需要在自己的结构体中也定义一个父结构,以便自己来继承。但是这种方法有一定的局限性:访问权限没有区分,对父类的数据成员没有保护。

下面是声明在结构体外的例子:

       声明在结构体外的有点在于实现了子类在对父类继承时访问权限的控制。

typedef struct Parent{//父类的属性说明}Parent1;//只包含属性//父类实现方法void parentfunc1()void parentfunc2()//子类属性结构体typedef struct Child{//子类的属性struct Parent father;……;}child1;//子类的成员方法//继承父类的方法//追加的成员函数实现方法void childfunc1();
        ②多态:

        可以是用C语言中的万能指针void* 实现多态,还有回调函数,即函数通过函数指针调用的函数。

 void * p = new(Point, 1, 2);    void * pp = new(Circle, 1, 2);    draw(p); //draw函数实现了多态    draw(pp);    delete(p);    delete(pp);  

回调函数在上一篇文章中有提及。

     ③封装:

     1.利用C语言语法。在头文件中声明,在C文件中真正定义它。

     这样可以隐藏内部信息,因为外部不知道对象所占内存的大小,所以不能静态的创建该类的对象,只能调用类提供的创建函数才能创建。这种方法的缺陷是不支持继承,因为子类中得不到任何关于父类的信息。

     2.把私有数据信息放在一个不透明的priv变量或者结构体中。只有类的实现代码才知道priv或者结构体的真正定义。

0 0
原创粉丝点击