关于异常的几个问题(22分)

  • 主题发起人 主题发起人 刘亚林
  • 开始时间 开始时间

刘亚林

Unregistered / Unconfirmed
GUEST, unregistred user!
1.自定义异常的问题:
 书上这么讲的:
type
Ematherror=class(exception);
Ezerodivide=class(exception);
……
 我的问题是:我们定义了Ematherror是exception的子类以后,是不是还要自定义Ematherror的数据域和它自己的方法呢?
2.exception类里有没有一些处理除溢出,除0等等异常的相关方法。
3.type
Ematherror=class(exception);
Ezerodivide=class(exception);
var
……
 try
x:=y/z;
except
on Ezerodivide do HandleZeridivide;
on Eoverflow do Handleoverflow;
这是书上的一段代码,其中的Handlezeridivide是不是书上拿它作个标记,而实际上,还得自己编写这一段出错的处理代码,是的吗?还是这个Handlezeridivide是Ezerodivide从exception类继承下来的一个方法?
 
4.异常的触发
 raise ErangeErrror.createFmt('%d is not within the valid range of %d..%d',[reault,min,max])

 这是书上的一段异常触发的例子,它的意思是说异常触发的格式:raise 异常名称.构造函数。我想问的是这里的这个createFmt()是个什么构造函数?构造函数不是create()吗?

5.在定义异常触发的另外一种格式里面有:raise object at address,它说object和at address子句是用于重新指定异常被触发位置的指针,它指向一个过程或函数,若用户没指定异常触发的地址指针,则将把异常的实际产生地址返回给用户。system单元里定义了一个公共变量ErrorAddr,这个变量中保存了异常触发的地址。

我的问题是:(1)这里的system单元是不是指uses后面的sysutils;
      (2)能帮我写一个关于这个的例子出来吗?
 
倾家荡产了……
 
1,4你看看它的EXCEPTIN的源碼就是了。
2。有的
3。應該是一段代碼
 
>>1)这里的system单元是不是指uses后面的sysutils;
不是的,system单元被隐含引用了,所以在uses部分不需要引用该单元。
 
“>>1)这里的system单元是不是指uses后面的sysutils;
不是的,system单元被隐含引用了,所以在uses部分不需要引用该单元。”

谢谢~

其它问题呢?

“lichdr, 时间:2004-1-31 9:03:00, ID:2428090
1,4你看看它的EXCEPTIN的源碼就是了。
2。有的
3。應該是一段代碼 ”

到哪看源码?不要说或者or 应该,要确定,要摆出事实来~~

谢谢了
 
source/trl/sys目錄下的sysutils單元有
Exception = class(TObject)
private
FMessage: string;
FHelpContext: Integer;
public
constructor Create(const Msg: string);
constructor CreateFmt(const Msg: string
const Args: array of const);
constructor CreateRes(Ident: Integer)
overload;
constructor CreateRes(ResStringRec: PResStringRec)
overload;
constructor CreateResFmt(Ident: Integer
const Args: array of const)
overload;
constructor CreateResFmt(ResStringRec: PResStringRec
const Args: array of const)
overload;
constructor CreateHelp(const Msg: string
AHelpContext: Integer);
constructor CreateFmtHelp(const Msg: string
const Args: array of const;
AHelpContext: Integer);
constructor CreateResHelp(Ident: Integer
AHelpContext: Integer)
overload;
constructor CreateResHelp(ResStringRec: PResStringRec
AHelpContext: Integer)
overload;
constructor CreateResFmtHelp(ResStringRec: PResStringRec
const Args: array of const;
AHelpContext: Integer)
overload;
constructor CreateResFmtHelp(Ident: Integer
const Args: array of const;
AHelpContext: Integer)
overload;
property HelpContext: Integer read FHelpContext write FHelpContext;
property Message: string read FMessage write FMessage;
end;

1。一般沒什麼特殊情況不用自己定義新的方法與數據域了。
2。在這個單元下能發現很多的DELPHI預定義的異常。
4。發現沒。它的構造函數有十二個之多。
 
恩~明白了

 
后退
顶部