请参阅以下代码的预期流程
在这种情况下,基类异常由于其多态性而正在捕获这种预期行为.
#include <stdio.h>
#include<iostream.h>
using namespace std;
void main() {
try {
//throw CustomException();
throw bad_alloc();
}
///due to poly morphism base class reference will
catch(exception &ex) {
cout<<"Base :"<<ex.what()<<endl;
}
catch(bad_alloc &ex) {
cout<<"Derieved :"<<ex.what()<<endl;
}
}
Run Code Online (Sandbox Code Playgroud)
产量
Run Code Online (Sandbox Code Playgroud)bad_alloc
但是如果我正在创建一个自定义异常,如下面的代码所示,派生类正在捕获异常,即使基类catch首先出现在catch块中:
class CustomException : exception {
public :
CustomException() { }
const char * what() const throw() {
// throw new exception();
return "Derived Class Exception !";
}
};
void main() {
try {
throw CustomException();
//throw bad_alloc();
}
///due to poly morphism base class reffrence will
catch(exception &ex) {
cout<<"Base :"<<ex.what()<<endl;
}
catch(CustomException &ex) {
cout<<"Derived :"<<ex.what()<<endl;
}
}
Run Code Online (Sandbox Code Playgroud)
预期产量:
Run Code Online (Sandbox Code Playgroud)Base : Derived Class Exception !
实际产量:
Run Code Online (Sandbox Code Playgroud)Derived: Derived Class Exception !
Mil*_*nek 10
使用class关键字声明的类的默认继承访问说明符是private.这意味着CustomException继承自exception privately.使用private继承的派生类不能绑定到对其父类的引用.
如果你继承public它会工作正常:
class CustomException : public exception // <-- add public keyword here
{
public :
CustomException()
{
}
const char * what()
{
return "Derived Class Exception !";
}
};
int main()
{
try
{
throw CustomException();
}
catch(exception &ex)
{
cout<<"Base :"<<ex.what()<<endl;
}
catch(CustomException &ex)
{
cout<<"Derived :"<<ex.what()<<endl;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |