关闭

C++异常, 一个测试异常传递切割问题的程序

390人阅读 评论(0) 收藏 举报

异常传递过程异常累的切割问题,

// Test20110115.cpp : 定义控制台应用程序的入口点。
// 异常传递机制 案例调研

#include "stdafx.h"
#include<iostream>
#include<string>
#include<Windows.h>
#include<stdlib.h>
#include<math.h>


using namespace std;

class  myException
{
public:
 myException():excName("default baseExction")
 {
  cout<<"default myException construct"<<endl;
 }
 myException(string name)
 {
  excName = name;
  cout<<"myException construct"<<endl;

    
 }
 virtual string getName()
 {
  return excName;
 }

private: string excName;
};

class deriverExcetion:public myException
{
public:
 deriverExcetion():dexcName("defualt deriverExcetion")
 {
  cout<<"default deriverExcetion construct"<<endl;
 }
 deriverExcetion(string name)
 {
  dexcName =name;
  cout<<"deriverExcetion construct"<<endl;
 }
 string getName()
 {
  return dexcName;
 }

private: string dexcName;

};
int main(int argc, _TCHAR* argv[])
{
 cout<<"hello word"<<endl;
 string excMessage;
 deriverExcetion mydexc("deriverExcetion   constructed");
 ///cout<<" mydexc.getName() 地址:"<<(int)(&mydexc.getName())<<endl;
 try
 {
  throw &mydexc;
 }
 catch(myException *exc)
 {
  excMessage =exc->getName();
  cout<<"excMessage: "<<excMessage<<endl;
  //throw *exc;
 }
 try
 {
  throw mydexc;
 }
 catch(deriverExcetion exc)
 {
  excMessage =((myException)exc).getName();
  cout<<"excMessage: "<<excMessage<<endl;
  //throw ((myException)exc);
 }
 //catch(myException exc)
 //{
 // excMessage =exc.getName();
 // cout<<"excMessage: "<<excMessage<<endl;
 // //throw *exc;
 //}
 cin.get();
 return 0;
}

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:55104次
    • 积分:735
    • 等级:
    • 排名:千里之外
    • 原创:24篇
    • 转载:1篇
    • 译文:0篇
    • 评论:1条
    最新评论