缺什么补什么,别假装会面向对象

这门课针对的是 C++ 面向对象编程中最容易含糊过关的硬骨头。很多自学者写了几个月代码,遇到基类指针指向派生类时,还是搞不清析构函数为什么必须是虚函数,更说不明白虚函数表在内存里到底长什么样。如果你只会写简单的类继承,却在面对多继承、纯虚函数以及运行时类型识别时心里发虚,那说明你的基础有缺口。本课不扯泛泛的语法,直接切入虚函数、构造与析构的底层运作机制,顺带把模板和类包装器的应用补齐。它要求你已经掌握基本的类定义和成员函数写法,如果连 public 和 private 的权限控制都还没理清,建议先补完基础语法再来看,否则会被虚函数表原理和类模板混合封装绕晕。

先抓核心机制,再啃模板封装

拿到资料后,别按顺序从头看到尾。建议先啃前四块关于虚函数与析构构造、虚函数表原理、纯虚函数及多继承实战的内容。这几节是整门课的命门,看完必须能在纸上画出基类和派生类的虚函数表指针指向关系,并解释为什么基类的析构函数声明为虚函数后,通过基类指针释放派生类对象时能避免内存泄漏。接着去学 final 与 override 以及 virtual 与类大小的部分,把编译期的多态检查和内存占用的变化搞透。后半段关于函数模板与类模板的内容,重点放在类模板实战与类包装器上,这是从理论走向工程化代码复用的关键。最后一块类模板与类混合封装继承多态,是对前面所有知识点的综合检验,别跳过,它专治“学完就忘、一写就乱”的毛病。

动手验证与资料配合方式

配套资料里的代码片段不是用来看的,是用来拆解的。每一块内容学完,自己新建工程把代码敲一遍,然后故意改错去验证。比如学虚函数表时,自己写个包含基类和两层派生类的结构,用指针强行访问虚函数表里的函数地址,打印出来和资料里的结论对比。学 dynamic_cast 与 typeid 时,自己造一个没有虚函数的类去强转,看看编译器报什么错,加深对运行时类型识别前提的理解。资料里的类包装器和混合封装代码,先别看答案,自己试着用模板把继承体系封装一遍,卡住了再对照查漏。学完这套资料,你应当能独立设计一个带有安全释放机制的类继承体系,能准确判断何时该用纯虚函数接口,并熟练运用类模板封装可复用的数据结构。别满足于看懂代码,能脱稿写出带虚析构函数的多继承结构,才算真正补齐了这块能力缺口。

课程目录

1 01.虚函数与析构构造 (30:55)
2 02.虚函数表原理 (29:08)
3 03.纯虚函数 (20:47)
4 04.纯虚函数与多继承实战 (06:09)
5 05.final与override (08:39)
6 06.virtual与类的大小 (10:29)
7 07.虚函数强化 (30:16)
8 08.运行数据类型dymamic_cast与typeid (21:17)
9 09.代码重用 (06:45)
10 10.函数模板与模板函数以及类中的模板 (13:23)
11 11.函数模板在类的应用 (12:05)
12 12.类模板实战与函数模板对比 (23:41)
13 13.类包装器 (24:09)
14 14.类模板与类混合封装继承多态 (20:05)