关于异常处理(需要的话可再加100分)

fsht 2002-05-12 08:41:58
近来学异常处理,不甚明了,请问下面的程序是不是对的?
#include <iostream>
class OutOfBounds {
public:
OutOfBounds() { std::cout << "Out of bounds"; }
};

class X {
public:
X();
~X() {}
int find(const int& index);
private:
enum { N = 20 };
int a[N];
};

X::X()
{
for (int i = 0; i < N; i++)
a[i] = i;
}

int X::find(const int& index)
{
if (index >= N || index < 0)
throw OutOfBounds();
return a[index - 1];
}

main() {}
...全文
98 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
lizhongkun 2002-05-13
  • 打赏
  • 举报
回复
go on
fsht 2002-05-13
  • 打赏
  • 举报
回复
up
fsht 2002-05-13
  • 打赏
  • 举报
回复
To:maoliao(毛料),up 是一个类,他怎么会是OutOfBand的实例呢
class up {};
...

main() {
...
try {
f(i);
} catch(up) {
...
}
}
JeasonZhao 2002-05-13
  • 打赏
  • 举报
回复
一点建议
int X::find(const int& index)
throw OutOfBounds
。。。
显示说明,这样代码明白
fsht 2002-05-13
  • 打赏
  • 举报
回复
谢谢各位了
fsht 2002-05-13
  • 打赏
  • 举报
回复
To:kof99th(小虫)
上面是书上的一个例子,我是举给maoliao(毛料)看的
kof99th 2002-05-13
  • 打赏
  • 举报
回复
up当然不是OutOfBounds的实例,你的find实现是抛出一个OutOfBounds异常,所以当你调用find时只会有OutOfBounds异常被抛出.
你的main()中catch(up)永远不会被调用.因为类型不匹配.应改为catch(OutOfBounds&),以为在异常处理中可能改变OutOfBounds的类成员,所以要用OutOfBounds&,这样的效率也比pass value高.
fsht 2002-05-13
  • 打赏
  • 举报
回复
就上面的还不够吗,难道你还看不清楚up是一个类吗
To:maoliao(毛料),up 是一个类,他怎么会是OutOfBand的实例呢
class up {};
...

main() {
...
try {
f(i);
} catch(up) {
...
}
}
maoliao 2002-05-13
  • 打赏
  • 举报
回复
My god!
請你把你的代碼完整貼出來吧!否則容易斷章取義呀!
maoliao 2002-05-12
  • 打赏
  • 举报
回复
当然是类了,我劝你还是不要先学<<C++编程思想>>,不如学<<C++ Primer>>把基础扎实呀!
fsht 2002-05-12
  • 打赏
  • 举报
回复
OutofBand是一个类还是一个名字空间啊,还是什么
maoliao 2002-05-12
  • 打赏
  • 举报
回复
up正是OutofBand的一个实例呀!
fsht 2002-05-12
  • 打赏
  • 举报
回复
但是我用
catch(OutOfBounds)
也可以阿
《C++编程思想》也是这样的(P364):
class up {};
...

main() {
...
try {
f(i);
} catch(up) {
...
}
}
maoliao 2002-05-12
  • 打赏
  • 举报
回复
catch 语句正是根据throw语句抛出异常的类型(包括整型,字符型,自定义类型等--如题)来判断执行哪个catch子句;例如:
...
catch(int i)
{
...
}
catch(double j)
{
...
}
catch(OutofBand& o)
{
...
//本题不需任何其它错误处理语句,因为构造函数本身就是错误处理函数
//更一般地,通常自定义类型,提供一个函数来进行错误处理
}
...
fsht 2002-05-12
  • 打赏
  • 举报
回复
不是阿,你看清楚一点
To:maoliao(毛料)
为什么要用
catch(OutofBand& o)
不用
catch(OutofBand o)
maoliao 2002-05-12
  • 打赏
  • 举报
回复
捕获异常啊!
否则你写异常类型OutofBand干什么?
fsht 2002-05-12
  • 打赏
  • 举报
回复
To:maoliao(毛料)
为什么要用
catch(OutofBand& o)
不用
catch(OutofBand o)
maoliao 2002-05-12
  • 打赏
  • 举报
回复
哦,最好改为catch(OutofBand& o)
maoliao 2002-05-12
  • 打赏
  • 举报
回复
没错!
只要使用catch(OutofBand o){}即可捕获您需要的异常,因为异常处理语句
就在OutofBand的构造函数中。
fsht 2002-05-12
  • 打赏
  • 举报
回复
TO:jerry921(jerry)
OutOfBounds是系统函数吗,包含在哪个文件。
加载更多回复(9)

69,375

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧