背景:
阅读文章

LPC基础数据类型--class

[日期:2008-12-25] 来源:  作者:hcifml [字体: ]

class是LPC的一种数据类型,它能够把不同的数据类型组织起来,构成一种
新的class变量(注意我说的是一种新的class变量,而不是一种新的变量,
LPC里面没有自定义数据类型,而且我用一种,后面的
描述都请注意这个词汇)

使用一种class首先要声明这种class的构成形式,它都由哪些成员组成,格式如下:

class class_name {


  变量类型 变量名1;
  变量类型 变量名2;
  ...
}

这样就声明了一种class,如果要使用这种class你还需要声明一个这种class变量并
初始化

class class_name var = new(class class_name);

这句语句中,前面的class class_name说明变量var是class类型(而且是
class_name这种class不是别的class)
后面的new()是初始化,class类型必须用new来初始化,没有初始化的class
变量是无法使用的(就如同如果你写下如下语句string str; str += "test";会报错
一样,LPC没有初始化的任何变量如果直接使用会遇到意向不到的问题,之后的帖
子里也许我们会详细讨论这点)

class 变量初始化以后就可以使用了,它支持的运算符有->和=(就好像mapping和
array只支持[]和=运算符一样)
使用->可以引用class变量里面的元素,并对其超作
下面一段代码展示了如何使用一个class

class account {
  string id,
        passwd,
        email;
  int level;
}

class account a_account = new(class account);
a_account->id = "hcifml";
a_account->passwd = "";
a_account->email = "hcifml_shadow-mud@yahoo.com.cn";
a_account->level = 1;
if(a_account->id == "lonely") a_account++;

引用一种class里面的元素后就像操作该元素类型的变量一样
new(class account)在初始化一个account的class的时候只是创建了这个class,
但是没有对里面的元素赋值,如果我们需要赋值,也可以在初始化的时候一并完成
形式是
class class_name var = new(class class_name, 元素名 : 值);

所以,我们还可以这样写
class account a_account = new(class account, id : "yeer");
class account b_account = new(class account, id : "lonely", level : 100);

好了,下面再来说一个class数组的问题
有了上面的基础,你应该可以写出下面这段代码

class account *accounts;

这就是一个class accout的数组,它没有任何元素,只是一个数组,你完全可以按照对一个
数组的操作去操作它。
如果你已经非常熟悉数组的操作了话,下面我将要说的对你来说毫无用处,但是考虑到毕竟
有人不太清楚这个部分,我不得不举上大量的例子来说明一个数组的用法

代码段1:
accounts = ({new(class account)});
accounts += ({new(class account)});

代码段2:
accounts = ({});
int i = 10;
while(i--) accounts += ({new(class account)});
account -= ({0});

代码段3:
accounts = allocate(10);
foreach(class account a_account in accounts) a_account = new(class account);

 

除上面的方法外,还有一种创建class数组的方法,那就是使用mixed,
mixed可以是任何数据类型,当然也包括数组

mixed accounts;

//下面可以使用上面三个代码段中的任意一个,当然包括其他的正确形式的代码
//我只使用一个来掩饰
accounts = allocate(10);
foreach(class account a_account in accounts) a_account = new(class account);


以上是我暂时所能想到的关于class语法方面的内容,欢迎补充。

class是一种组织数据的形式,在这点上和array, mapping没有什么不同,但是它基本上没有
怎么被我们广大的wiz们使用,可能是因为大家对它还不够了解,我想希望通过上面简短的介绍
后,能够让大家认识这种变量类型

同作为数据组织形式之后我还要发一篇关于class array和mapping比较讨论的帖子,来研究
这三者的优缺点,适用情形和三者的转换方式。

类的最大特点就是类可以直接引用成员的特性。
收藏 推荐 打印 | 录入:sbso | 阅读:
相关内容      
本文评论   [发表评论]   全部评论 (0)
内容推送
52mud提供
一起回忆泥巴游戏QQ群68186072
52mud官方微信公众平台
热门评论