您的位置:首页 > 编程语言 > C语言/C++

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

2013-10-19 11:10 344 查看

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代换原则。本方法为单继承。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: