C语言面向对象的实现---继承性

     在嵌入式系统开发中,不同的MCU一般都支持C编译器,而可能没有C++的编译器或支持的不好,所以,在嵌入式系统的开发中,C语言是使用最多的语言。而为了使用面向对象(OO)的优点,一般在C编程中加入OO的特性。

        面向对象编程(OOP)有三个特性:封装、继承和多态性。Smalltalk、C++、Java、C#等面向对象语言在语言层次上支持OOP,而OOP并不是为特殊语言而使用的,C虽然在语言层次上不支持OOP,用C汇编也可以实现OOP的思想。

        以下用C实现了OOP的三个特性之一:继承性

       继承的本质就是遵循Liskov代换原则---父类可以出现的地方,子类就可以出现(代替)。

       用C实现单继承一般有三种方法实现。

1. ---方法声明放在结构中:

typedef Struct MySuperClassTag{

    int x;      //属性声明

   void f(void);//方法声明,在结构中。

}MySuperClass

typedef Struct MyClassTag{

    MySuperClass  super    //继承自父类,一定要放在最前边

     int y;      //增加的属性声明

    void g(void);//增加的方法声明

}MySuperClass

问题:有的编译器不支持?成员访问权限不好控制?

2. ---用宏定义出C+:

     C+(注意是一个“+”)采用宏定义,定义了CLASS、SUBCLASS、METHODS、END_CLASS等宏。C+可以实现OOP的三个特性,其中包括多态性。Miro Samek在第一版书提出了这个方法,但是他却没有使用它。

问题:使用并不直观!

3. ---方法声明放在结构外,属性-方法关联:

    这是Miro Samek的QP中采用的方法。如下图。

    关键:(1)定义属性为结构,属性是继承的,遵循Liskov原则;

              (2)用一个属性结构指针做为成员方法的第一个参数,把属性与方法相关联。如下边的me;

              (3)方法的继承由你自己来控制---用宏定义,访问的权限也可控制(C的封装性)。

              (4)自己添加的方法---用函数声明,访问权限可控。

    优点:简单、直观、成员访问权限可控、对方法的使用简单。

 

图1. 继承关系


图2.属性继承关系

 

   本方法遵循Liskov代换原则。本方法为单继承。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值