读书笔记:C++ primer 5th edition--chapter19.特殊工具与技术


以下是c++未被广泛应用的特征。
part1.控制内存分配
1.可以重载new与delete。一共有八个版本,可以重载任意一个,但是要求自定义版本必须位于全局作用域或者类作用域。
2.demo
void *operator new(size_t size){
     if (void * mem = malloc(size)
          return mem;
     else
          throw bad_alloc();
}
void operator delete( void *mem) noexcept { free(mem); }

part2.运行时类型识别RTTI
1.适用于我们想让基础类对象的指针或引用执行某个派生类操作并且该操作不是虚函数。因为某些场景无法定义虚函数。
2.在条件部分执行动态转换可以确保类型转换和结果检查在同一条表达式完成。
if( Derived *dp = dynamic_cast < Derived* >(bp) ) {}//
3.typeid运算符
1)作用于对象,而不是指针
2)对象有虚函数,则typeid的结果知道运行才确定。
4.RTTI用途:为具有继承关系的类实现相等运算符时有用。

part3.枚举类型
1.分类:
1)限定作用域的枚举类型,enum class open_mode {input, output, append};
2)不限定作用域的枚举类型, enum color {} or enum {}  //未命名,不限定
2.如果不指定枚举值,默认为前者的值加1.成员是const,初始化枚举成员必须提供常量表达式。
3.指定enum大小
enum intValue : unsigned long long {}..

part4.类成员指针
1.类的成员指针是可以指向类的非静态成员的指针。
2.初始化的时候不指定对象,只指向成员。
const string Screen::*pdata;//声明pdata为一个指向Screen类的const string 成员的指针
可以读取任意对象,但是,无法写入。
auto pdata = &Screen::contents;//contents是Screen的私有成员,pdata必须位于类内部或者友元内。
3.成员函数指针
//为了选择重载的版本
char (Screen::*pmf2) (Screen::pos, Screen::pos ) const;
pmf2 = &Screen::get;//限定get的版本,通过限定可以接受的形参以及返回值
char c2 = (myScreen.*pmf2) (0, 0);//调用优先级高,因此要加括号

part5.剩余
1.嵌套类,union,局部类
2.volatile与const可以兼容
3.合成的拷贝对volatile对象无效
4.extern
void (*pf1) (int);      //指向c++函数
extern “C” void (*pf2) (int);     //指向c函数 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值