C++primer 第十五章笔记 初稿

15.1 概述

  1. 抽象,继承与动态绑定都是基础的方法。
  2. 新标准新增override关键字,用于显示声明改写基类虚函数,一个重要的好处是让编译器帮助我们发现一些覆盖时的失误。
  3. 动态绑定一般通过指针(引用)实现。

15.2 基类与派生类

  1. 虚函数

    • 要求:构造函数和静态函数不能是虚函数
    • 基类的虚函数在派生类中隐式地也是虚函数。
  2. 派生类

    • 派生类必须通过基类构造函数初始化基类部分
    • 派生类最好遵循基类的接口(即用基类提供的接口操作基类部分)
  3. final关键字

    • 阻止继续继承,放在基类定义时的类名后
    • 置于函数const限定之后,阻止派生类覆盖(无论是否为虚函数)

15.3 虚函数

  1. 虚函数返回的类型通常与基函数匹配,但如果返回类本身指针可以不同,前提是派生类到基类转化可行。

  2. 如果用基类指针调用的虚函数有默认实参,则永远使用基函数的默认实参。

  3. 通过作用域运算符可以阻止动态绑定。

15.4 抽象基类

纯虚函数可以定义在类的外部(很有意思)。

15.5 访问控制与继承

  1. protected

    • 基类的对象不可访问
    • 派生类内部可访问
    • 派生类的成员只能通过派生类对象访问(与第一条同理)
  2. 访问说明符的意义

    • 控制派生类对象对基类的访问权限
    • 控制派生类的派生类对基类的访问权限
  3. 派生类向基类的转换

    • 派生类的成员和友元必然可以
    • 只有当公有继承时,用户代码可以使用该转换;
    • 如果是共有或保护继承,派生类的派生类可以向基类转换
  4. class 与 struct 的第二个区别:默认的访问说明符不同。

15.6 继承中类的作用域

  1. 继承类的作用域嵌套在基类中,因此继承类可以直接使用定义在基类的名字(当然也可以覆盖)

  2. 无论形参列表是否相同,派生类隐藏基类所有同名函数(解释虚函数的形参列表保持一致的原因)

  3. 可以使用using声明,保留部分基类函数

15.7 继承中的构造函数与拷贝控制

  1. 基类一般需要一个虚析构函数,同时阻止合成移动构造函数。

  2. 派生类的析构函数只负责销毁自己分配的资源。

  3. 派生类可使用using操作,生成与基类构造函数一一对应的多个派生类构造函数,其中派生类自己的数据成员被默认初始化。

    • 注意点:
      • using不改变访问级别
      • 基类构造函数有默认实参,派生类不会继承默认实参,而是生成多个版本的构造函数

15.9 文本查询再探

  1. 派生类应当与基类保持ISA关系
  2. 并非所有的构造函数都一定是公有的
  3. set在类实现中的有用操作
    • upper_bound:在multiset中可以跳过与当前关键字相同的所有元素
    • set_intersection:合并两个set
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值