上集对OOSM宏包及其应用作了直观的介绍,下面我们来看看ccirc/crect/csqua等对象具体的描述方式。
接口(interface)对行为进行抽象,利用它可以实现类的多态性,imeas.h定义了一个测量周长和面积的接口:
#ifndef __IMEAS_H__
#define __IMEAS_H__
#include "oosm.h"
/* Measuring Interface, for measuring the perimeter and area of objects */
interface(imeas)
{
double (*peri)(void* this); /* for measuring the perimeter of objects */
double (*area)(void* this); /* for measuring the area of objects */
};
#endif/*__IMEAS_H__*/
由于接口是抽象的,所以特别注意把this指针声明为void*类型,这样在进行指针转换的时候会比较方便。
类(class)拥有属性和方法,多态方法采用实现接口的方式来达成目的,crect.h/crect.c定义和实现了一个矩形类:
#ifndef __CRECT_H__
#define __CRECT_H__
#include "imeas.h"
/* Rectangle Class, for describing rectangle objects */
class(crect)
{
implements(imeas); /* Implements imeas interface */
double width;
double height;
}