跳到正文

第6章学习笔记:类与对象模型

课程笔记

通过逐步可编译的程序掌握类与对象模型,从现象走到语言规则、资源状态和工程证据。

关联:章节 第6章 类与对象模型

第6章笔记:类与对象模型

本章问题

通过逐步可编译的程序掌握类与对象模型,从现象走到语言规则、资源状态和工程证据。 七课组成一条从可编译现象到语言规则、对象状态和工程验证的链,不能拆成互不相干的语法点。

七课连接

  • 从不变量设计类:规则 class preserves an invariant;实验任务为写一个能编译运行的最小程序展示“从不变量设计类”,记录输入、关键对象状态、输出和编译命令,并用规则 class preserves an invariant 解释结果;严格边界为不得把“从不变量设计类”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《访问控制与封装》的输入或约束。
  • 访问控制与封装:规则 public interface hides representation;实验任务为写一个能编译运行的最小程序展示“访问控制与封装”,记录输入、关键对象状态、输出和编译命令,并用规则 public interface hides representation 解释结果;严格边界为不得把“访问控制与封装”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《构造、委托与成员初始化》的输入或约束。
  • 构造、委托与成员初始化:规则 members initialize in declaration order;实验任务为写一个能编译运行的最小程序展示“构造、委托与成员初始化”,记录输入、关键对象状态、输出和编译命令,并用规则 members initialize in declaration order 解释结果;严格边界为不得把“构造、委托与成员初始化”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《成员函数与this》的输入或约束。
  • 成员函数与this:规则 this identifies receiver;实验任务为写一个能编译运行的最小程序展示“成员函数与this”,记录输入、关键对象状态、输出和编译命令,并用规则 this identifies receiver 解释结果;严格边界为不得把“成员函数与this”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《运算符重载的边界》的输入或约束。
  • 运算符重载的边界:规则 operators preserve expected laws;实验任务为写一个能编译运行的最小程序展示“运算符重载的边界”,记录输入、关键对象状态、输出和编译命令,并用规则 operators preserve expected laws 解释结果;严格边界为不得把“运算符重载的边界”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《继承、虚函数与多态》的输入或约束。
  • 继承、虚函数与多态:规则 virtual dispatch uses dynamic type;实验任务为写一个能编译运行的最小程序展示“继承、虚函数与多态”,记录输入、关键对象状态、输出和编译命令,并用规则 virtual dispatch uses dynamic type 解释结果;严格边界为不得把“继承、虚函数与多态”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《类设计实验》的输入或约束。
  • 类设计实验:规则 composition before inheritance;实验任务为写一个能编译运行的最小程序展示“类设计实验”,记录输入、关键对象状态、输出和编译命令,并用规则 composition before inheritance 解释结果;严格边界为不得把“类设计实验”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《函数模板与实例化》的输入或约束。

实验闭环

从空目录建立在线兼容的C++17程序,开启警告,运行本章两道代码题各四组测试,再新增一个失败用例。C++20扩展另作显式比较。保存编译命令、输入、输出、首个诊断和修复后的回归。涉及资源就画所有权,涉及容器就标迭代器有效性,涉及并发就画happens-before。

复盘

错题不能只记“粗心”。标记它属于阶段、类型、控制、对象生存期、所有权、异常、复杂度还是并发。更换输入与实现重做阶段卷;能解释规则为何阻止错误,并能展示反例,才算迁移成功。