Crest的语法:宏的魔术汇演计算机等级考试
文章作者 100test 发表时间 2010:01:01 13:03:59
来源 100Test.Com百考试题网
最理想的面向对象语法当然是仿造C#、java这样的结构了,但是因为C语言要用头文件,所以估计最终的样式还是类似于C 。首先我们还是制定一个目标的样式,然后再去用Crest仿造实现。目标是这样的[代码1]:
class CString: CObject, IUnknown, IDispatch
{
int length.
char * buffer.
public virtual void Format(char * format)
{
DoFormat(format).
}
public void DoFormat(char * format)
{
if( OnFormat != null ) OnFormat(format).
}
public abstract void OnFormat(char * format).
}
要想用Crest实现上面的结构,有几个问题要注意:
this指针。所有的对象成员定义和调用都隐含有一个this指针
命名规范,CString的Format和CDateTime的Format肯定不是同一个东西,但是C语言不支持override,所以要保证成员函数不重名。
经过两天的断断续续工作,最终呈现结果如下[代码2]:
DECLARE_CLASS(CString)
EXTENDS(CObject, IMPLEMENT2(IUnknown,IDispatch))
DECLARE_FIELD(CString, int, length)
DECLARE_FIELD(CString, char *, buffer)
DECLARE_VIRTUAL1(CString, void, Format, const char * format)
DECLARE_ABSTRACT1(CString, void, OnFormat,const char * format)
DECLARE_METHOD1(CString, void, DoFormat,const char * format)
DECLARE_CONSTRUCTOR(CString)
DECLARE_DESTRUCTOR(CString)
END_DECLARE(CString).