《C++ Primer》 读书笔记——第十九章 特殊工具与技术

第十九章 特殊工具与技术

19.1 控制内存分配

1. 重载new和delete

在这里插入图片描述
执行new表达式的三步操作:
调用operator new的标准库函数,分配一块内存空间
在内存空间上使用构造函数构造对象,初始化
返回指向该对象的指针

new和delete接口

在这里插入图片描述

malloc函数与free函数

当定义自己的new和delete函数时,需要用到malloc函数和free函数
在这里插入图片描述
在这里插入图片描述

2. 定位new表达式

向new中传入指定内存地址,允许我们在一个特定的、预先分配的内存地址上构造对象
在这里插入图片描述
在这里插入图片描述

19.2 运行时类型识别

在这里插入图片描述
在这里插入图片描述

1. dynamic_cast运算符

将基类指针或引用安全的转换成派生类指针或引用。
转换成功的前提是该基类指针原来就指向一个派生类对象
基类含有虚函数
在这里插入图片描述
在这里插入图片描述

指针类型的转换

在这里插入图片描述
将基类指针转换为派生类指针
在这里插入图片描述
将转换放在if判断条件的好处:同时完成类型转换和条件检查两项任务
在这里插入图片描述

引用类型的转换

在这里插入图片描述

2. typeid运算符

返回表达式的动态类型
在这里插入图片描述
在这里插入图片描述

使用typeid运算符

在这里插入图片描述
typeid应该作用于对象,而非指针
在这里插入图片描述

3. type_info类

typeid返回值为type_info类
在这里插入图片描述
在这里插入图片描述
name函数的返回值结果依据编译器而异
在这里插入图片描述

19.3 枚举类型(enum)

在这里插入图片描述
限定作用域的枚举类型需要使用域访问符才可以访问里面的内容
在这里插入图片描述
不限定作用域的枚举类型可以直接访问
在这里插入图片描述
enum可以分开定义
在这里插入图片描述

枚举成员

在这里插入图片描述
枚举成员是const,在初始化枚举成员时提供的初始值必须是常量表达式

枚举定义新的类型

在定义并初始化时,只能使用枚举成员或另一个同类型的枚举对象来初始化。不能直接使用int。
在这里插入图片描述
在使用时自动转换成整型

指定enum的大小类型

在这里插入图片描述
默认情况下enum的成员类型为int

19.4 类成员指针

成员指针既包括了类的信息,也包括了成员信息。
在力扣刷题的环境中,自定义的比较函数处于solution类中,在使用谓词时如果调用了自定义的比较函数指针,会引发错误。
在这里插入图片描述
在这里插入图片描述

1. 数据成员指针

成员指针需要指定相应的类
在这里插入图片描述
pdate是该指针的名字,该指针是一个const string类型的指针,并且是一个Screen类里面的成员。

在这里插入图片描述
初始化该成员指针,令它指向某个Screen对象里面的contents成员

使用数据成员指针

当为成员指针赋值时,该指针并没有指向任何数据(只说明了指向某个对象的特定成员)
只有当解引用时我们才提供真正的对象(给出特定的对象)
在这里插入图片描述
既可以通过对象也可以通过指针

返回数据成员指针的函数

在这里插入图片描述

2. 成员函数指针

指向类的成员函数的指针
在这里插入图片描述

使用成员函数指针

和成员指针一样,不过需要加括号确定优先级
在这里插入图片描述

使用成员指针的类型别名

在这里插入图片描述

3. 将成员函数用作可调用对象

成员指针不是一个可调用对象
在这里插入图片描述
在谓词中使用将会报错
在这里插入图片描述

使用function生成一个可调用对象

将成员函数指针封装到一个function里面,使用谓词时传入该function
在这里插入图片描述
在这里插入图片描述

使用mem_fn生成一个可调用对象

将成员函数指针传入mem_fn中,让其生成一个可调用对象
在这里插入图片描述

使用bind生成一个可调用对象

使用bind重新映射
在这里插入图片描述

19.5 嵌套类

一个类定义在另一个类的内部
在这里插入图片描述
在这里插入图片描述

声明一个嵌套类

在这里插入图片描述

在外层类之外定义一个嵌套类

需要加上外层类和内层类两层的名字
在这里插入图片描述
在这里插入图片描述

嵌套类和外层类是相互独立的

在这里插入图片描述
外层类对象中不会有任何嵌套类成员

19.6 union:一种节省空间的类

在这里插入图片描述
union在任意时刻只有一个数据成员有值,其他成员处于未定义状态。
union定义了一种新类型
在这里插入图片描述

定义union

默认情况下成员是公有的
在这里插入图片描述

使用union类型

初始值被用于初始化第一个成员
在这里插入图片描述
在这里插入图片描述

匿名union

可以直接访问它的成员
在这里插入图片描述

含有类成员的union

在这里插入图片描述

19.7 局部类

定义在函数内部的类
在这里插入图片描述

局部类不能使用函数作用域中的变量

在这里插入图片描述
在这里插入图片描述

常规的访问保护规则对局部类同样使用

在这里插入图片描述

局部类中的名字查找

在这里插入图片描述

19.8 固有的不可移植的特性

程序因机器不同而造成的执行结果的不同
在这里插入图片描述

1. 位域

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用位域

在这里插入图片描述
在这里插入图片描述

volatile限定符

在这里插入图片描述

在这里插入图片描述
额外修饰,说明该变量值由程序直接控制之外的过程控制
const和volatile可同时对类型进行额外修饰

合成的拷贝对volatile对象无效

在这里插入图片描述

2. 链接指示:extern"C"

调用其他语言写的程序
在这里插入图片描述

声明一个非C++的函数

在这里插入图片描述

链接指示与头文件

一次性建立多个链接
在这里插入图片描述

链接指示对整个声明都有效

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值