用C语言进行面向对象编程

 *******************************************************************************C中可移植的继承性和多态性2Fr: [ESP-9712-code]By: Miro SamekRd: Amine Chen[amine@263.net]******************************************
摘要由CSDN通过智能技术生成

 

*******************************************************************************
C中可移植的继承性和多态性2
Fr: [ESP-9712-code]
By: Miro Samek
Rd: Amine Chen[amine@263.net]
*******************************************************************************
快速参考:
=========
本文解释如下这些"设计模式"在C中的实现:
封装性,继承性,多态性.
类继承: 单继承; 接口继承: 多继承.

 

用C语言进行面向对象编程

*******************************************************************************
C中可移植的继承性和多态性2
Fr: [ESP-9712-code]
By: Miro Samek
Rd: Amine Chen[amine@263.net]
*******************************************************************************
快速参考:
=========
本文解释如下这些"设计模式"在C中的实现:
封装性,继承性,多态性.
类继承: 单继承; 接口继承: 多继承.

抽象基类 'Object'
----------------
Object类在类层次的根部.该类封装了虚指针,并定义了虚析构函数.为了效率,将构造和
析构函数定义为'inline'宏.它们都被保护(只能由子类访问),因为该类只想用于继承.客户
不应创建'Object'对象.
该类还声明几个私有方法(某些是类方法,也就是没有'this'指针). 因为这些方法要求
类型转换(只在一定的上下文中合法),所以只通过宏使用它们.

声明类
------
1.使用宏CLASS开始类的声明;
2.宏IMPLEMENTS用于想实现的每个接口;
3.声明类属性(实例变量);
4.用宏VTABLE声明虚函数.宏参数必须于CLASS的一致;
5.宏EXTENDS用于IMPLEMENTS声明的每个接口;
6.声明所有虚方法的函数指针;
7.用宏声明类方法;
8.为类实现的所有public&protected方法声明原型.
9.用宏END_CLASS结束类声明.

#include "object.h"

CLASS(Shape, Object) /* class Shape extends Object */
IMPLEMENTS(Scaleable); /* and implements Scaleable interface */
struct String name; /* public name (object composition) */
VTABLE(Shape, Object) /* Shape's VTABLE extends Object */
EXTENDS(Scaleable); /* and also extends Scaleable */
double (*Area)(Shape); /* virtual method to compute area */
METHODS
/* protected constructor (single '_' in the name) 
* means that Shape is an abstract class 
*/
Shape Shape_Con(Shape this, char *name);
void Shape_Des(Shape this); /* protected destructor */
END_CLASS

声明接口
--------
接口表示为函数指针的结构(VTABLE).接口可扩展其他接口.
1.使用宏INTERFACE开始接口的声明;
2.宏EXTENDS用于想继承的每个接口(可选);
3.声明该接口引入的所有抽象方法指针.每个方法必须声明第一个参数为Object类型;
4.用END_INTERFACE宏结束声明;

#include "object.h"

INTERFACE(Scaleable)
void (*Scale)(Object, double);
END_INTERFACE

INTERFACE(Fooable)
EXTENDS(Scaleable); /* interface Fooable extends Scaleable */
int (*Foo)(Object, long);
END_INTERFACE

绑定虚函数
----------
虚函数在类描述器(VTABLE)中声明为函数指针.VTABLEs必须为每个类定义和初始化.
分配实现函数给相应的函数指针.
1.使用BEGIN_VTABLE为给定的类定义类描述器constructor;
2.用VMETHOD将抽象类方法绑定到它们的实现;
3.用IMETHOD将抽象接口方法绑定到它们的实现;
4.用END_VTABLE结束虚拟表声明.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值