用基本C来构造一个对象,我们必须要多摸索摸索,因为没有语法支持。但是我们不必抱怨,因为有些支持,C编译器做和我们做,效果都是差不多的。
构造对象我们首先要遵循数据与函数分开的原则,这样对我们创建新对象很有好处。也就是说我们把对象中的函数,都要写到与具体数据无关,那样当我们需要2个或2个以上对象时,我们只需要把数据重新复制一份,而具体的处理代码却不必重新写,这样我们就可以争取用最少的代码而获得最多的功能。
我很怕罗嗦的语法结构,所以我在上帖中希望有人能回我的帖,把上面的例子用语法总结出来,很遗憾却没有,我想偷懒都不成,所以只好把原来的帖子一个一个的翻出来再读。写说与伪指令相关的事情。看下面的例子:
#define Class(c) struct c
#define Object(o,c) struct c o
这两个伪码就会把我们的裸程序搞得挺象个C++的样子,其实也就是欺骗一下看官的眼球而已,如果你不屑一做,那就直接用struct也满好个。有了这两个定义,我们就把前面例子罗列一下,形成一个对象的样子来。
还有几个函数指针类型我们都把它们定义出来(下面定义忽略了参数定义):
typedef void (*dSAC)(……); // 显示一个字符指针类型
typedef void (*dSAL)(……); // 显示一行指针类型
再定义类:
Class(disp)
{
UCH MonitorType; // 数据变量定义
:
:
:
dSAC dispShowAChar; // 功能变量定义
dSAL dispShowALine;
:
:
:
};
相信这样已经足够说明问题了,这个类就是定义了一个对象所需要的全部数据,凡是涉及到代码的都可以作为同一类型的不同对象共有的财富,共同使用。比如我们要在我们的裸系统中企图同时支持最多两个显示器,那么我们就只需要创建两个对象,其实这里说的创建语法也很简单,就说定义两个变量好了,然后赋初始值给它,这就是创建。
先定义:
Object(FD000, disp); // 定义对象FD000,关联子对象D000
Object(FD001, disp); // 定义对象FD001,关联子对象D001
然后通过赋予初始值来创建它,这里再引入一个伪定义:
#define CreateObject (o, mt, sac, sal) { \
##o.MonitorType = mt; \
##o.dispShowAChar = sac; \
##o.dispShowALine = sal;}
这样我们就可以象模象样地使用我们的对象了:
CreateObject(FD000,0,soShowAChar000,soShowAChar000,soShowALine000);
这条语句创建了一个缺省显示器的父对象,其中so-是sub object的缩写,000是为编号为0的缺省显示器所安排的编号,最后一个是255,因为Monitor是UCH类型,所以最多可以建立255个类型的显示器。soShowAChar000、soShowALine000为缺省类型的显示器的具体处理函数的名字,函数体在子对象D000中去组织。
同样的方法我们为我们的裸程序创建另一个对象:
CreateObject(FD001,1,soShowAChar001,soShowAChar001,soShowALine001);
当然这个CreateObject只是一个例子,因为我们这个创建工作可能会有很长的参数,那么有丰富编程经验的高手,您是愿意如何组织您的创建过程呢?我想我没有必要在我的思想里去弄一个严谨的格式,思路是没有清晰路线的,它具有很大的延展性,只要能胜任“合理”这个词,您就可以大胆的去做。
本帖的最后我想提出一个问题:MonitorType将何去何从?
用基本C来构造一个对象,我们必须要多摸索摸索,因为没有语法支持。但是我们不必抱怨,因为有些支持,C编译器做和我们做,效果都是差不多的。
构造对象我们首先要遵循数据与函数分开的原则,这样对我们创建新对象很有好处。也就是说我们把对象中的函数,都要写到与具体数据无关,那样当我们需要2个或2个以上对象时,我们只需要把数据重新复制一份,而具体的处理代码却不必重新写,这样我们就可以争取用最少的代码而获得最多的功能。
我很怕罗嗦的语法结构,所以我在上帖中希望有人能回我的帖,把上面的例子用语法总结出来,很遗憾却没有,我想偷懒都不成,所以只好把原来的帖子一个一个的翻出来再读。写说与伪指令相关的事情。看下面的例子:
#define Class(c) struct c
#define Object(o,c) struct c o
这两个伪码就会把我们的裸程序搞得挺象个C++的样子,其实也就是欺骗一下看官的眼球而已,如果你不屑一做,那就直接用struct也满好个。有了这两个定义,我们就把前面例子罗列一下,形成一个对象的样子来。
还有几个函数指针类型我们都把它们定义出来(下面定义忽略了参数定义):
typedef void (*dSAC)(……); // 显示一个字符指针类型
typedef void (*dSAL)(……); // 显示一行指针类型
再定义类:
Class(disp)
{
UCH MonitorType; // 数据变量定义
:
:
:
dSAC dispShowAChar; // 功能变量定义
dSAL dispShowALine;
:
:
:
};
相信这样已经足够说明问题了,这个类就是定义了一个对象所需要的全部数据,凡是涉及到代码的都可以作为同一类型的不同对象共有的财富,共同使用。比如我们要在我们的裸系统中企图同时支持最多两个显示器,那么我们就只需要创建两个对象,其实这里说的创建语法也很简单,就说定义两个变量好了,然后赋初始值给它,这就是创建。
先定义:
Object(FD000, disp); // 定义对象FD000,关联子对象D000
Object(FD001, disp); // 定义对象FD001,关联子对象D001
然后通过赋予初始值来创建它,这里再引入一个伪定义:
#define CreateObject (o, mt, sac, sal) { \
##o.MonitorType = mt; \
##o.dispShowAChar = sac; \
##o.dispShowALine = sal;}
这样我们就可以象模象样地使用我们的对象了:
CreateObject(FD000,0,soShowAChar000,soShowAChar000,soShowALine000);
这条语句创建了一个缺省显示器的父对象,其中so-是sub object的缩写,000是为编号为0的缺省显示器所安排的编号,最后一个是255,因为Monitor是UCH类型,所以最多可以建立255个类型的显示器。soShowAChar000、soShowALine000为缺省类型的显示器的具体处理函数的名字,函数体在子对象D000中去组织。
同样的方法我们为我们的裸程序创建另一个对象:
CreateObject(FD001,1,soShowAChar001,soShowAChar001,soShowALine001);
当然这个CreateObject只是一个例子,因为我们这个创建工作可能会有很长的参数,那么有丰富编程经验的高手,您是愿意如何组织您的创建过程呢?我想我没有必要在我的思想里去弄一个严谨的格式,思路是没有清晰路线的,它具有很大的延展性,只要能胜任“合理”这个词,您就可以大胆的去做。
本帖的最后我想提出一个问题:MonitorType将何去何从?
举报