Chinaunix首页 | 论坛 | 博客
  • 博客访问: 111044
  • 博文数量: 41
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 335
  • 用 户 组: 普通用户
  • 注册时间: 2013-02-21 12:49
文章分类
文章存档

2013年(41)

我的朋友

分类: C/C++

2013-03-14 09:33:42

    在嵌入式系统开发中,不同的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+:

     

问题:使用并不直观!

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

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

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

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

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

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

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

 

图1. 继承关系


图2.属性继承关系

 

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

阅读(911) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~