2013-05-15 118 views
0

我有这样的代码:C++捕获异常

Class A{}; 

Class B : A {}; 

void foo() 
{ 
    throw new B; 
} 

在这里,我们只能通过捕捉(B * E)赶上例外。但是为什么我们无法使用catch(A * e)来捕捉它。 这是因为私人访问类型的继承?

+3

通过值引发异常并通过const引用捕获,不需要堆分配。 – rubenvb

回答

2

是的,这正是为什么。

由于B私下继承A,除了B之外,没有人知道继承。 因此,B对象不被视为A对象,因此无法将其转换为A的实例。