这门课解决什么问题

很多想转行数字芯片验证的人,往往直接去啃 SystemVerilog,结果发现验证平台里到处都是类、对象、继承这些概念,看代码像看天书。这门课就是来解决这个断层问题的。它不是一门泛泛的 C++ 教程,而是专门给后续学 SV 打基础,重点帮你建立面向对象的编程思维。课程从 C++ 为什么存在讲起,对比 C 语言的局限性,让你理解面向对象到底解决了什么工程痛点,再一步步带你把 C++ 的基本语法和命名空间这些底层概念吃透。如果你之前只写过 C 或者只会一点脚本语言,这门课能帮你平稳过渡到面向对象的世界里来。

适合什么基础,建议先看哪几块

这门课适合两类人:一是有 C 语言基础但没接触过面向对象的,二是完全零基础但想走芯片验证方向的转行者。如果你连 C 都不会,建议先补 C 基础再来看。课程前几个章节讲 C++ 的设计哲学和语言定位,这部分不要跳过,它决定了你后面学类和对象时能不能理解到位。开发环境搭建那块,如果你平时用 Windows,建议跟着课程在 Linux 命令行下做一遍,因为后续真实的验证工作几乎都在 Linux 环境里完成。命名空间那几节看起来枯燥,但它是理解 SV 里 package 机制的前置知识,建议手敲一遍代码再往下走。

学完能做什么,资料怎么配合练习

学完这门课,你不会立刻成为 C++ 高手,但你能独立写出一个结构清晰的面向对象小程序,理解类怎么定义、对象怎么实例化、命名空间怎么避免冲突。更重要的是,你再看 SystemVerilog 的验证环境代码时,不会对 class 和 object 的写法感到陌生。资料包里的视频要按顺序看,不要跳着挑,因为面向对象的概念是一环扣一环的。每看完一节,自己在 Linux 终端里用 g++ 编译运行一遍代码,改改参数看看输出变化。如果只看视频不动手,面向对象的思想很难真正扎根。把基础语法和命名空间这部分练熟了,再进入后续的 SystemVerilog 学习会顺畅很多。


建立起来足够的面向对象思想和编程功底,为后续阶段学习SystemVerilog打下基础。

课程目录

*   01 B1.为什么会有C++这门语言/

  *   01 B1.1.朱老师C++课程整体介绍

  *   02 B1.2.为什么有了C还需要C++

  *   03 B1.3.C++究竟是个怎样的语言

  *   04 B1.4.C++的典型项目和优势领域

  *   05 B1.5.C++程序员发展前景分析

*   02 B2.C++开发环境搭建/

  *   01 B2.1.如何选择合适的开发环境

  *   02 B2.2.常用C++开发环境介绍

  *   03 B2.3.Linux命令行下C++编程初体验

*   03 B3.C++基本编程体验/

  *   01 B3.01.何为命名空间

  *   02 B3.02.namespace的初级定义和使用

  *   03 B3.03.C++默认命名空间

  *   04 B3.04.C++匿名命名空间

  *   05 B3.05.嵌套命名空间

  *   06 B3.06.C++标准库介绍

  *   07 B3.07.iostream的cout使用1

  *   08 B3.08.iostream的cout使用2

  *   09 B3.09.iostream的cin使用

  *   10 B3.10.C++字符串string类使用

*   04 B4.会C语言就能学会面向对象/

  *   01 B4.1.从高处看面向对象

  *   02 B4.2纯C语言传统方式实现流水灯

  *   03 B4.3.升级版纯C实现流水灯

  *   04 B4.4.面向对象方式纯C实现流水灯1

  *   05 B4.5.面向对象方式纯C实现流水灯2

  *   06 B4.6.用C++实现流水灯

  *   07 B4.7.拓展分析和总结

*   05 B5.C++的封装和访问权限/

  *   01 B5.01.典型的C++面向对象编程1

  *   02 B5.02.典型的C++面向对象编程2

  *   03 B5.03.C++的构造函数和析构函数

  *   04 B5.04.在构造和析构函数中使用动态内存1

  *   05 B5.05.在构造和析构函数中使用动态内存2

  *   06 B5.06.构造函数与类的成员初始化1

  *   07 B5.07.构造函数与类的成员初始化2

  *   08 B5.08.拷贝构造函数的引入1

  *   09 B5.09.拷贝构造函数的引入2

  *   10 B5.10.浅拷贝与深拷贝

  *   11 B5.11.什么是访问权限问题

  *   12 B5.12.C++为什么要设计访问权限

  *   13 B5.13.访问权限带来的一些新编程理念

  *   14 B5.14.struct和class的区别

  *   15 B5.15.const和mutable是干嘛的1

  *   16 B5.16.const和mutable是干嘛的2

  *   17 B5.17.扫尾和总结

*   06 B6.C++继承和多态特性/

  *   01 B6.01.什么是面向对象的继承特性1

  *   02 B6.02.什么是面向对象的继承特性2

  *   03 B6.03.C++继承中的权限管控1

  *   04 B6.04.C++继承中的权限管控2

  *   05 B6.05.C++继承中的权限管控3

  *   06 B6.06.继承体系下子类和父类的关系1

  *   07 B6.07.继承体系下子类和父类的关系2

  *   08 B6.08.派生类和基类的构造析构关系1

  *   09 B6.09.派生类和基类的构造析构关系2

  *   10 B6.10.派生类和基类的同名成员问题

  *   11 B6.11.子类和父类的类型兼容规则

  *   12 B6.12.继承的优势与不良继承

  *   13 B6.13.组合介绍以及与继承对比

  *   14 B6.14.多继承及其二义性问题1

  *   15 B6.15.多继承及其二义性问题2

  *   16 B6.16.虚继承解决菱形继承的二义性问题

  *   17 B6.17.多态和虚函数1

  *   18 B6.18.多态和虚函数2

  *   19 B6.19.纯虚函数与抽象类1

  *   20 B6.20.纯虚函数与抽象类2

  *   21 B6.21.虚析构函数

  *   22 B6.22.using重新定义继承时访问权限

*   07 B7.C++的静态类和静态成员/

  *   01 B7.1.类的静态成员

  *   02 B7.2.静态成员的深度理解

  *   03 B7.3.静态成员的用途

  *   04 B7.4.静态类的扩展讲解