| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 258 人关注过本帖
标题:异常处理的问题
只看楼主 加入收藏
lyj23
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:168
专家分:140
注 册:2010-10-31
结帖率:86.21%
收藏
已结贴  问题点数:20 回复次数:2 
异常处理的问题
程序代码:
#include <cstddef>
#include <iostream>
#include <conio.h>
using namespace std;
template<class T,int sz=1>class PWrap{
T*ptr;
public:
       class Rangeerror{};
       PWrap(){
        ptr=new T[sz];
        cout<<"PWrap constructor"<<endl;}
        ~PWrap()
        {delete[]ptr;
        cout<<"PWrap destructor"<<endl;}
       T& operator [](int i)throw(Rangeerror){
                   if(i>=0&&i<sz)return ptr[i];
        throw Rangeerror();}
        };
class Cat{
public:
       Cat(){cout<<"Cat()"<<endl;}
       ~Cat(){cout<<"~Cat{}"<<endl;}
       void g(){}};
class Dog{
public:
       void* operator new[](size_t){
             cout<<"Allocating a Dog"<<endl; //这个重载在哪里用到了?size_t是无符号长整型吗? (1)
             throw 47;}
       void operator delete[](void* p){
            cout<<"Deallocating a Dog"<<endl;
            ::operator delete[](p);}   //这一句能不能换种写法?它的意思是不是清除p的空间,是不是还原运算符重载?
            };
class UseResources{
      PWrap<Cat,3>cats;
      PWrap<Dog>dog;
      public:
      UseResources(){cout<<"Use()"<<endl;}
      ~UseResources(){cout<<"~Use()"<<endl;}
      void f(){cats[1].g();}};//是这里用了 (1)重载?
int main()
{
try{UseResources ur;}catch(int){
  cout<<"inside handler"<<endl;}catch(...){
                cout<<"inside catch(...)"<<endl;}
                getch();
}
没时间了,请大家帮忙仔细分析一下整个程序吧,书上写的比较少(选自C++编程思想 第二卷)
2011-05-17 20:18
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:20 
class UseResources
{
private:
    PWrap<Cat,3>cats;
    PWrap<Dog>dog;
public:
    UseResources(){cout<<"Use()"<<endl;}
    ~UseResources(){cout<<"~Use()"<<endl;}
    void f(){cats[1].g();}
};
这里用到了类的组合  
在类实例化得过程当中 构造的顺序 cats   dog  然后再是自身的构函{ ...... }

运行结果:
图片附件: 游客没有浏览图片的权限,请 登录注册


中间有一段没有进行构造  因为抛出了异常
    try
    {
        UseResources ur;
    }//对象生命期结束  反序进行析构
    catch(int)
    {
        cout<<"inside handler"<<endl;//捕获异常  输出
    }
2011-05-17 23:11
lyj23
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:168
专家分:140
注 册:2010-10-31
收藏
得分:0 
THINKS
2011-05-20 06:06
快速回复:异常处理的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015963 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved