大胖的部落格
Just a note
C++博客
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
112 随笔 :: 0 文章 :: 3 评论 :: 0 Trackbacks
<
2009年6月
>
日
一
二
三
四
五
六
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
Algorithm(13)
(rss)
C#(13)
(rss)
C++(22)
(rss)
Design Pattern(23)
(rss)
Others(14)
(rss)
STL(9)
(rss)
Technical(2)
(rss)
UML(2)
(rss)
Win32(18)
(rss)
Reference
Windows XP command line
最新评论
1. re: 在TCL命令行中调用C函数
@Kenny
实在不好意思,时间太过久远,本人已好久没有接触TCL……
--大胖
2. re: 在TCL命令行中调用C函数
請問如何溝通array 變數
Q:1
tcl array in C
Q:2
C array in tcl
懇求指導
--Kenny
3. re: 在TCL命令行中调用C函数
谢谢!
--1232
异常和继承
异常类
:
class
BaseEx
{
public
:
virtual
void
print()
{
cout
<<
"
Base print
"
<<
endl;
}
}
;
class
DerivedEx:
public
BaseEx
{
public
:
void
print()
{
cout
<<
"
Derived print
"
<<
endl;
}
}
;
父类型的异常
:
BaseEx
*
p
=
&
DerivedEx();
//
父类型指针指向子类对象
try
{
if
(
1
)
{
throw
*
p;
//
抛出父类型异常
}
}
catch
(DerivedEx)
//
子类型的catch无法捕获父类型异常
{
cout
<<
"
catch
"
<<
endl;
}
catch
(BaseEx )
//
父类型的catch捕获父类型异常
{
cout
<<
"
catch
"
<<
endl;
}
rethrow
:
重新抛出的异常类型和之前抛出的类型一致,与throw所在catch子句所catch的异常类型无关。
try
{
try
{
if
(
1
)
{
throw
DerivedEx();
//
抛出子类型异常
}
}
catch
(BaseEx)
//
捕获父类型异常
{
cout
<<
"
catch
"
<<
endl;
throw
;
//
重新抛出
}
}
catch
(DerivedEx)
//
捕获子类型对象
{
cout
<<
"
recatch by derived type
"
<<
endl;
}
异常与虚函数
:
catch子句的异常类型如果为对象,则无法体现虚函数特性,引用则可以。
try
{
try
{
if
(
1
)
{
throw
DerivedEx();
//
抛出子类异常
}
}
catch
(BaseEx e)
//
捕获父类型异常,创建异常对象
{
e.print();
//
调用父类方法,因为e是父类对象
throw
;
//
重新抛出
}
}
catch
(BaseEx
&
e)
//
捕获父类型异常对象,异常引用
{
e.print();
//
调用子类方法,因为e是引用,实际对象为子类对象
}
throw在抛出异常对象进行拷贝时,调用的是对象静态类型所对应的类的拷贝构造函数:
try
{
try
{
if
(
1
)
{
throw
DerivedEx();
//
抛出子类异常
}
}
catch
(BaseEx
&
e)
//
捕获父类型异常引用,不创建异常对象
{
e.print();
//
调用子类方法,因为e引用的是子类对象
throw
e;
//
重新抛出,调用父类的拷贝构造函数,因为对象的静态类型是BaseEx
}
}
catch
(BaseEx
&
e)
//
捕获父类型异常对象,e引用的是上面创建的父类对象
{
e.print();
//
调用父类方法
}
return
0
;
}
栈展开和析构函数调用
:
在Test()带着这个未处理的异常退出之前,栈展开过程会销毁Test()中所有在抛出异常之前被创建的局部类对象,以防止内存泄漏。
void
Test()
{
Source s;
throw
TestExcep();
}
异常规范
:
基类中虚拟函数的异常规范可以与派生类改写的成员函数的异常规范不同。
但是派生类虚拟函数的异常规范必须与基类虚拟函数的异常规范一样或者更严格。
posted on 2009-05-10 16:00
大胖
阅读(282)
评论(0)
编辑
收藏
引用
所属分类:
C++
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
补码
带引用计数的智能指针(模板类)
虚基类、虚函数,对象内存分布
template
override, overload, hide
继承
基类中的虚函数
继承关系中的二义性
虚基类
C/C++关键字
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
Powered by:
C++博客
Copyright © 大胖