C++ primer -- 第十五章 友元,异常和其他
本章的内容是对《C++primer》第六版,第十五章阅读时,作下的笔记,仅供自己复习,巩固所用
主要内容如下:
友元类
友元类方法
嵌套类
引发异常,try 块和 catch 块
异常类
运行阶段类型的识别(RTTI)
dynamic_cast, typeid
staticast, constcast, reiterpret_cast
1. 友元
友元类的所有方法都可以访问原始类的私有成员和保护成员,也可以做更严格的限制。
友元类的声明可以位于公有,私有,或保护部分,这无关紧要。
友元成员函数
可以选择让特定的类成员称为另一个类的友元。这里引入一个前向声明的概念。
要在 Tv 类中声明 Remote::set_chan(Tv & t, int c)为友元。
class Tv
{
friend void Remote::set_chan(Tv & t, int c);
}
要使用强项声明才能通过编译器编译。
class Tv; //forward declaration
class Remote {...}; //Tv-using methods as prototypes only
class Tv{...}; //put remote method definitions here
共同的友元
函数需要访问两个类的私有成员时,逻辑上,这样的函数是每个类的成员函数,但这是不可能的。解决方案是一个是类的成员,一个是类的友元。
2. 嵌套类
C++中可以将类声明放在另一个类中。在另一个类中声明的类被称为嵌套类(nested class)。类嵌套和包含不同,类嵌套不创建类成员,而是定义一种类型。
嵌套类和访问权限
有两种访问权限适合嵌套类。首先类的声明位置决定了嵌套类的作用域,其次,嵌套类的共有成分,私有成分,保护部分控制了对类成员的访问。
作用域
如果嵌套类在另一个类的私有部分声明,则只有类的私有部分知道它。如果是在保护部分声明,内部可见,外部不可见。声明在共有部分,内部,外部都可见。
访问控制
类声明的位置决定了类的作用域可见性。类课件后,访问控制规则(共有,私有,保护,友元)将决定程序对嵌套成员的访问权限。
3. 异常
异常是 C++的较新功能。
3.1 调用 abort()
Abort()函数位于头文件 cstdlib()中,典型实现是向标准错误流发送消息,然后终止程序。此时如果发生在调用的函数中,不会返回到 main()中。
3.2 返回错误码
使用调用函数的额返回码来指出问题
3.3 异常机制
异常处理包含三个部分:
引发异常
使用处理程序捕获异常
使用 try
try 块表示其中特定的异常可能被激活的代码块,后年跟一个或多个 catch 块。catch 块关键字和异常类型用作标签,指出相应的异常类型。指出当异常被引发时,程序应跳到这个位置执行。
评论