写点什么

C++ primer -- 第十五章 友元,异常和其他

用户头像
Dreamer
关注
发布于: 2020 年 11 月 02 日
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)。类嵌套和包含不同,类嵌套不创建类成员,而是定义一种类型。


嵌套类和访问权限


有两种访问权限适合嵌套类。首先类的声明位置决定了嵌套类的作用域,其次,嵌套类的共有成分,私有成分,保护部分控制了对类成员的访问。


  1. 作用域


如果嵌套类在另一个类的私有部分声明,则只有类的私有部分知道它。如果是在保护部分声明,内部可见,外部不可见。声明在共有部分,内部,外部都可见。


  1. 访问控制


类声明的位置决定了类的作用域可见性。类课件后,访问控制规则(共有,私有,保护,友元)将决定程序对嵌套成员的访问权限。


3. 异常


异常是 C++的较新功能。


3.1 调用 abort()


Abort()函数位于头文件 cstdlib()中,典型实现是向标准错误流发送消息,然后终止程序。此时如果发生在调用的函数中,不会返回到 main()中。


3.2 返回错误码


使用调用函数的额返回码来指出问题


3.3 异常机制


异常处理包含三个部分:


  • 引发异常

  • 使用处理程序捕获异常

  • 使用 try


try 块表示其中特定的异常可能被激活的代码块,后年跟一个或多个 catch 块。catch 块关键字和异常类型用作标签,指出相应的异常类型。指出当异常被引发时,程序应跳到这个位置执行。


3.4 将对象用作异常类型


用户头像

Dreamer

关注

一个不想做搜索的NLPer不是一个好的CVer 2019.12.18 加入

还未添加个人简介

评论

发布
暂无评论
C++ primer -- 第十五章 友元,异常和其他