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

             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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值