2013年(41)
分类: C/C++
2013-03-14 09:33:42
面向对象编程(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代换原则。本方法为单继承。