异常和其他

目录

  • 嵌套类
    • 嵌套类和访问权限
  • 异常
    • 异常机制
  • RTTI
    • dynamic_cast
    • typeid运算符和type_info类

嵌套类

将类声明放在另一个类中,在另一个类中声明的类被称为嵌套类。

嵌套类和访问权限

  1. 作用域
声明位置 包含它的类是否可以使用它 从包含它的类派生而来的类是否可以使用它 在外部是否可以用
私有部分
保护部分
公有部分 是,通过类限定符来使用

异常

异常机制

对异常处理有3部分组成:

  • 引发异常:可能有异常的代码块
  • 使用try块:标识特定的异常可能被激活的代码块,表面需要注意这些代码引发的异常
  • 使用处理程序捕获异常:catch关键字开头,括号中的类型声明,指出异常处理程序要响应的异常类型

throw终止函数的执行,并使得程序沿函数调用序列后退,直到找到包含try块的函数,即第一个这样的函数:包含能够捕获相应异常的try-catch。

栈解退:函数出现异常而终止,则程序将释放栈中内存,但不是释放栈的第一个返回地址后停止,而是基继续释放栈,直到找到一个位于try块的返回地址。随后,控制权将转到块尾的异常处理程序,而不是程序调用后面的第一条语句。

程序进行栈解退回到捕获异常的地方时,将释放栈中的自动存储型变量。如果变量是类对象,将为该对象调用析构函数。

在一个异常类层次结构,并处理不同的异常类型,则使用基类引用将能够捕获任何异常对象;而使用派生类对象只能捕获它所属类及从这个类派生而来的类对象。引发异常的对象将被第一个与之匹配的catch块捕获,这意味着catch块的排列顺序应该与派生顺序相反。
用省略号可以表示异常类型,捕获任何异常。

RTTI

运行阶段类型识别

  • dynamic_cast运算符将使用一个指向基类的指针来生成一个指向派生类的指针;否则,该运算符返回空指针。
  • typeid运算符返回一个指出对象的类型的值。
  • type_info结构存储有关特定类型的信息。

dynamic_cast

dynamic_cast(pt)
如果指向的对象(*pt)的类型为Type或者是从Type直接或间接派生而来的类型,则可以将指针pt转换为Type类型的指针,否则,结果为0,即空指针。

typeid运算符和type_info类

typeid运算符确定两个对象是否为同种类型,运算符返回一个对type_info对象的引用,接受两种参数:

  • 类名
  • 结果为对象的表达式

例如:typeid(Magnificent)==typeid(*pg)

你可能感兴趣的:(C++基础)