课程培训
C++培训课程体系(选修)

C++培训课程体系(选修)

课程目录

  1. 专题一:C++基础入门与开发环境

  2. 专题二:C++核心语法与程序设计

  3. 专题三:函数进阶与程序组织

  4. 专题四:面向对象编程(类与对象)

  5. 专题五:数据的共享与保护

  6. 专题六:数组、指针与动态内存管理

  7. 专题七:继承与派生

  8. 专题八:多态性与虚函数

  9. 专题九:运算符重载

  10. 专题十:模板编程与泛型

  11. 专题十一:C++标准模板库(STL)

  12. 专题十二:C++输入输出流与文件操作

  13. 专题十三:异常处理与程序健壮性

  14. 专题十四:C++11/14/17/20新特性

  15. 专题十五:智能指针与内存管理

  16. 专题十六:并发编程与多线程

  17. 专题十七:设计模式与工程实践

  18. 专题十八:Qt框架与GUI应用开发

  19. 专题十九:网络编程基础

  20. 专题二十:C++项目实战与代码优化

 

专题一:C++基础入门与开发环境

  • 培训对象:零基础入门学员、C语言转型学习者、需要建立C++知识框架的初学者。

  • 培训目标

    1. 了解C++的发展历史、技术特点与应用领域(系统软件、游戏开发、嵌入式、高性能计算),建立对C++语言的整体认知。

    2. 掌握C++开发环境的搭建(Visual Studio、g++、Clang、IDE选择),熟悉编译、链接、运行的基本流程

    3. 完成第一个C++程序,理解程序的基本结构和开发过程

  • 培训内容介绍

    1. C++语言概述:了解C++的起源(C语言基础上发展)、标准化历程(C++98、C++11、C++14、C++17、C++20),认识C++在不同领域的应用(操作系统、游戏引擎、数据库、金融系统)

    2. 面向对象思想:初步了解面向对象程序设计的基本概念(对象、类、封装、继承、多态),对比与面向过程编程的差异

    3. 开发环境搭建:学习安装Visual Studio、Code::Blocks或配置MinGW/g++,熟悉IDE界面布局(编辑器、编译器、调试器)

    4. 第一个C++程序:编写HelloWorld程序,理解预处理指令(#include)、主函数(main)、输入输出(iostream、cout)

    5. 程序开发流程:掌握编辑、编译、连接、运行、调试的完整流程,理解源文件(.cpp)、头文件(.h)、目标文件、可执行文件的关系

    6. 注释与代码风格:学习单行注释(//)和多行注释(/* */),了解良好的代码风格规范。

    7. 命名空间:理解命名空间的概念,学习using namespace std的使用,了解命名空间的作用(避免命名冲突)

    8. C++对C的扩充:了解C++在非面向对象方面的增强(const、inline函数、函数重载、引用、new/delete)

    9. 编译预处理:学习常用的预处理指令(#include、#define、#ifdef、#pragma once)

    10. C++标准:了解不同C++标准(C++11/14/17/20)的主要特性,选择适合项目的标准版本

    11. 帮助文档:学习使用cppreference等在线资源,培养查阅文档的能力。

    12. 学习路径规划:介绍C++学习的进阶路径,规划个人学习方向。

 

专题二:C++核心语法与程序设计

  • 培训对象:所有C++初学者、需要夯实语法基础的开发人员。

  • 培训目标

    1. 掌握C++的基本语法要素(标识符、关键字、数据类型、运算符),能够编写简单的计算程序。

    2. 理解流程控制语句(条件、循环)的用法,能够实现各种业务逻辑流程

    3. 掌握基本输入输出方法,实现与用户的交互。

  • 培训内容介绍

    1. 标识符与关键字:学习C++标识符的命名规则(字母、数字、下划线),掌握C++的保留关键字

    2. 基本数据类型:掌握整型(int、short、long、long long)、浮点型(float、double)、字符型(char)、布尔型(bool)的取值范围和内存占用

    3. 常量与变量:学习变量的声明、定义、初始化,使用const定义常量,了解字面常量的表示

    4. 类型转换:掌握隐式类型转换和显式类型转换(static_cast、C风格强制转换)的规则,理解精度损失问题

    5. 运算符:掌握算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、逗号运算符的使用

    6. 表达式与优先级:理解运算符的优先级和结合性,学习编写复杂的表达式

    7. 流程控制(条件):掌握if-else条件语句、switch-case多分支语句的使用(case穿透、break、default)

    8. 流程控制(循环):掌握while循环、do-while循环、for循环的使用,理解循环嵌套

    9. 流程控制(跳转):学习break、continue、return、goto语句的使用

    10. 输入输出:学习cin进行标准输入,cout进行标准输出,掌握格式化输出(setw、setprecision、fixed)

    11. 枚举类型:了解枚举(enum)的定义与使用,enum class(强类型枚举)

    12. 自定义类型:学习typedef和using定义类型别名

 

专题三:函数进阶与程序组织

  • 培训对象:需要掌握模块化编程思想的开发人员。

  • 培训目标

    1. 掌握函数的定义、声明、调用方法,理解参数传递机制(值传递、引用传递、指针传递)。

    2. 学习函数重载、内联函数、默认参数等高级特性

    3. 理解递归函数的原理与应用,掌握函数在程序组织中的作用。

  • 培训内容介绍

    1. 函数定义与调用:学习函数的定义语法(返回类型、函数名、参数列表、函数体),掌握函数的调用方式

    2. 函数原型:理解函数声明(原型)的作用,掌握在调用前声明函数的方法

    3. 参数传递:掌握值传递(副本传递)、引用传递(别名传递)、指针传递的区别与适用场景

    4. 返回值:学习return语句的使用,掌握返回值的类型匹配,了解返回引用和返回指针的特殊性。

    5. 函数重载:理解函数重载的概念(同名函数不同参数),掌握重载的规则(参数类型、个数、顺序),了解编译器如何区分重载函数

    6. 默认参数:学习带默认参数值的函数定义,掌握默认参数的规则(从右向左连续设置)

    7. 内联函数:理解内联函数的作用(减少函数调用开销),学习inline关键字的用法,了解内联函数的适用场景和限制

    8. 递归函数:理解递归的概念(函数调用自身),学习递归函数的编写方法,掌握递归的终止条件,了解递归的优缺点

    9. 变量的作用域:学习局部变量、全局变量的作用域和生命周期,理解同名变量的遮蔽规则

    10. 变量的存储类别:了解auto、register、static、extern关键字的作用,掌握静态局部变量的特性

    11. 编译预处理:学习文件包含(#include)、宏定义(#define)、条件编译(#ifdef、#ifndef、#endif)的使用

    12. 多文件组织:学习将程序划分为多个源文件和头文件的方法,理解头文件的作用和防止重复包含的技巧

 

专题四:面向对象编程(类与对象)

  • 培训对象:需要理解面向对象思想、掌握类与对象核心概念的开发人员。

  • 培训目标

    1. 理解面向对象编程的核心概念(类、对象、封装、抽象),建立面向对象的思维方式

    2. 掌握类的定义与对象的创建,能够定义类的成员变量和成员函数

    3. 掌握构造函数与析构函数的定义与使用,理解对象生命周期管理

  • 培训内容介绍

    1. 面向对象概述:理解面向对象程序设计的基本概念(对象、类、封装、继承、多态),对比与面向过程编程的差异

    2. 类与对象的定义:学习类的定义语法(class、struct),掌握成员变量(数据成员)和成员函数(方法)的声明与定义

    3. 访问控制:理解公有(public)、私有(private)、保护(protected)成员的区别,掌握封装性的实现方法

    4. 对象的创建与使用:学习对象的定义(栈对象、堆对象),掌握通过对象名访问成员的方法(.运算符),通过指针访问成员的方法(->运算符)

    5. 构造函数:理解构造函数的作用(初始化对象),学习构造函数的定义(函数名与类名相同、无返回值),掌握重载构造函数

    6. 默认构造函数:了解无参构造函数的特性,学习系统自动生成默认构造函数的规则

    7. 带参数的构造函数:掌握参数化构造对象的多种方式,实现对象的灵活初始化

    8. 成员初始化列表:学习成员初始化列表的语法,了解其在const成员、引用成员初始化中的必要性

    9. 析构函数:理解析构函数的作用(清理资源),学习析构函数的定义(~类名、无参数、无返回值),掌握析构函数的调用时机

    10. 拷贝构造函数:理解拷贝构造函数的作用(用已有对象初始化新对象),学习拷贝构造函数的定义与调用场景

    11. 浅拷贝与深拷贝:理解浅拷贝的问题(指针成员共享内存),学习深拷贝的实现方法

    12. 对象数组:学习对象数组的定义、初始化、遍历使用

    13. 类的组合:学习一个类包含另一个类对象的情况,理解组合关系的构造与析构顺序

 

专题五:数据的共享与保护

  • 培训对象:需要理解数据共享机制、掌握const语义的开发人员。

  • 培训目标

    1. 掌握静态成员(static)的使用方法,实现类级别的数据共享

    2. 理解友元(friend)机制,掌握友元函数和友元类的使用方法

    3. 掌握const在各种场景下的使用(常对象、常成员函数、常引用)

  • 培训内容介绍

    1. 作用域与可见性:学习标识符的作用域(全局、局部、类作用域、命名空间),掌握可见性规则

    2. 对象的生存期:理解不同存储类型对象的生存期(静态生存期、动态生存期)

    3. 静态数据成员:理解静态数据成员的概念(属于类而非对象),学习静态数据成员的定义、初始化、访问方式

    4. 静态成员函数:掌握静态成员函数的定义与调用,理解静态成员函数只能访问静态成员的限制

    5. 友元函数:学习友元函数的声明(friend),掌握友元函数访问类私有成员的方法

    6. 友元类:了解友元类的概念,掌握友元类的声明,理解友元关系不能传递的特性

    7. 常对象:学习常对象的定义(const),理解常对象只能调用常成员函数的限制

    8. 常成员函数:掌握在成员函数后加const的语法,理解常成员函数不能修改数据成员的承诺

    9. 常数据成员:学习常数据成员的定义与初始化(必须在初始化列表中)

    10. 常引用:掌握常引用作为函数参数的优势(避免拷贝、保护数据、接受常量参数)

    11. const与指针:理解指向常量的指针、常指针、指向常量的常指针的区别与应用

    12. mutable关键字:了解mutable的作用(允许常成员函数修改特定成员)

    13. volatile关键字:了解volatile的作用(告知编译器变量可能被意外修改)

 

专题六:数组、指针与动态内存管理

  • 培训对象:需要深入理解内存管理、掌握指针高级应用的开发人员。

  • 培训目标

    1. 掌握数组的定义与使用(一维数组、二维数组、对象数组)

    2. 深入理解指针的概念与运算,掌握指针在数组、函数、对象中的应用

    3. 掌握动态内存分配(new/delete),理解堆与栈的区别,避免内存泄漏

  • 培训内容介绍

    1. 数组的定义与初始化:学习一维数组的定义、初始化方式(聚合初始化)、访问元素,理解数组名的本质

    2. 多维数组:掌握二维数组的定义、初始化、访问,理解行优先存储原则

    3. 对象数组:学习对象数组的定义与使用,掌握构造函数在对象数组创建时的调用方式

    4. 数组作为函数参数:掌握数组作为函数参数的退化机制(退化为指针),学习传递数组长度的方法

    5. 基于范围的for循环:学习C++11的基于范围for循环遍历数组和容器

    6. 指针基础:理解指针的概念(存储地址的变量),掌握指针的定义、初始化、间接访问(*运算符)

    7. 指针运算:学习指针的算术运算(+、-、++、--),理解指针偏移与数组下标的关系

    8. 指针与数组:掌握指针遍历数组的方法,理解数组名作为指针常量的特性

    9. 指针与函数:学习指针作为函数参数(实现输出参数),掌握函数指针的定义与使用(回调函数)

    10. 对象指针:学习指向对象的指针,使用->运算符访问成员,掌握this指针的概念(指向对象自身)

    11. 动态内存分配:理解堆内存与栈内存的区别,学习new运算符分配内存、delete运算符释放内存

    12. 动态数组:学习new[]分配数组、delete[]释放数组,掌握动态数组的访问方法

    13. 指针数组与数组指针:理解指针数组(存放指针的数组)和数组指针(指向数组的指针)的区别

    14. 指向指针的指针:学习二级指针的概念与应用(动态二维数组、修改指针本身)

    15. 内存泄漏与野指针:了解常见内存问题(内存泄漏、野指针、重复释放),学习避免这些问题的方法

 

专题七:继承与派生

  • 培训对象:需要掌握代码复用技术、构建类层次结构的开发人员。

  • 培训目标

    1. 理解继承的概念与作用(代码复用、建立类间关系),掌握派生类的定义方法

    2. 掌握不同继承方式(公有、保护、私有)对基类成员的访问控制影响

    3. 掌握派生类的构造函数与析构函数定义,理解构造/析构顺序

  • 培训内容介绍

    1. 继承概述:理解为什么要使用继承(代码复用、表示is-a关系),认识继承在面向对象设计中的重要性

    2. 派生类的声明:学习派生类的定义语法(class 派生类名 : 继承方式 基类名),掌握派生类的构成

    3. 继承方式与访问规则:掌握公有继承(public)、保护继承(protected)、私有继承(private)对基类成员访问属性的影响

    4. 基类成员在派生类中的访问:分析基类公有、保护、私有成员在不同继承方式下的访问属性变化

    5. 派生类构造函数:学习派生类构造函数的定义,掌握向基类构造函数传递参数的方法

    6. 构造/析构顺序:理解派生类对象创建时基类构造函数、派生类构造函数的执行顺序,以及析构时的逆序执行

    7. 同名成员:掌握派生类中定义与基类同名成员的方法,理解同名成员的遮蔽规则

    8. 访问声明:学习使用using声明调整基类成员在派生类中的访问属性

    9. 多重继承:学习多重继承的定义语法,理解多重继承的优缺点

    10. 二义性问题:掌握多重继承中可能出现的二义性问题(名称冲突),学习作用域限定符(::)解决二义性

    11. 虚基类:理解菱形继承问题(钻石继承),学习虚基类的定义(virtual继承),掌握虚基类在解决多重继承冗余数据中的作用

    12. 基类与派生类的转换:理解派生类对象到基类对象的赋值兼容规则,掌握向上转型(派生类指针/引用转换为基类指针/引用)

 

专题八:多态性与虚函数

  • 培训对象:需要掌握面向对象核心特性——多态的中高级开发人员。

  • 培训目标

    1. 理解静态多态与动态多态的区别,掌握虚函数实现动态多态的机制

    2. 掌握纯虚函数和抽象类的使用,理解接口设计思想

    3. 理解虚函数表(vtable)的基本原理,了解动态联编的性能代价

  • 培训内容介绍

    1. 多态性概述:理解多态的概念(同一接口,不同实现),区分编译时多态(函数重载、运算符重载)和运行时多态(虚函数)

    2. 虚函数的引入:理解为什么需要虚函数(实现基类指针调用派生类函数),学习虚函数的定义(virtual关键字)

    3. 动态联编:理解静态联编(编译时确定函数调用)和动态联编(运行时确定函数调用)的区别

    4. 虚函数的使用规则:掌握虚函数的声明条件(基类、派生类中同名同参),理解虚函数不能是静态成员、构造函数不能是虚函数

    5. 虚析构函数:理解为什么基类析构函数需要定义为虚函数(确保派生类对象正确析构),学习虚析构函数的定义

    6. 纯虚函数与抽象类:学习纯虚函数的定义(=0),理解抽象类的概念(不能实例化),掌握抽象类作为接口设计的方法

    7. 虚函数表:了解虚函数表(vtable)的基本原理,理解虚函数的调用机制(通过虚函数指针vptr)

    8. 动态多态的实现条件:掌握实现动态多态的三个条件(继承关系、虚函数重写、基类指针/引用调用)

    9. 覆盖(override):理解派生类重写基类虚函数的规则,学习C++11的override关键字(明确表示重写)

    10. final关键字:学习C++11的final关键字(禁止类被继承、禁止虚函数被重写)

    11. 重载、重写、重定义:区分函数重载、函数重写(覆盖)、函数重定义(隐藏)的概念

    12. 多态的应用场景:学习多态在工厂模式、策略模式、框架设计中的应用。

 

专题九:运算符重载

  • 培训对象:需要为自定义类型定义运算符行为的高级开发人员。

  • 培训目标

    1. 理解运算符重载的概念与意义(使自定义类型像内置类型一样使用)

    2. 掌握运算符重载的两种形式(成员函数形式、友元函数形式),了解各自的适用场景

    3. 掌握常用运算符(赋值、算术、关系、流、下标、自增自减)的重载方法

  • 培训内容介绍

    1. 运算符重载概述:理解运算符重载的概念(为已有运算符赋予新的含义),认识其在不改变语法规则的前提下扩展运算符适用范围的价值

    2. 重载规则:学习运算符重载的限制(不能创建新运算符、不能改变优先级和结合性、不能改变操作数个数),掌握可重载和不可重载的运算符

    3. 成员函数形式:学习以成员函数形式重载运算符的语法(返回类型 operator@(参数列表)),掌握隐含的this参数

    4. 友元函数形式:学习以友元函数形式重载运算符的语法,了解适用于左操作数不是当前类对象的情况

    5. 赋值运算符重载:掌握赋值运算符(=)的重载(通常返回引用),理解深拷贝的实现,解决浅拷贝问题

    6. 算术运算符重载:学习+、-、*、/等算术运算符的重载,考虑返回临时对象的方式

    7. 关系运算符重载:掌握==、!=、<、>等关系运算符的重载,通常返回bool类型

    8. 流插入/提取运算符重载:学习<<和>>运算符的重载(通常为友元函数),实现自定义类型的输入输出

    9. 下标运算符重载:掌握[]运算符的重载,实现类似数组的访问方式(常函数和非常函数版本)

    10. 自增/自减运算符重载:学习前置++和后置++的重载区别(后置通过int占位参数区分),掌握实现方式

    11. 函数调用运算符重载:理解函数对象(仿函数)的概念,学习()运算符的重载

    12. 类型转换运算符重载:学习自定义类型转换的方式(operator 目标类型())

    13. new/delete运算符重载:了解重载new和delete的意义(定制内存管理)

 

专题十:模板编程与泛型

  • 培训对象:需要编写通用代码、实现算法与数据结构复用的开发人员。

  • 培训目标

    1. 理解泛型编程的思想,掌握函数模板和类模板的定义与使用

    2. 学习模板的特化与偏特化技术,满足特定类型的特殊需求

    3. 了解模板元编程的基本概念,认识模板在编译期计算中的应用。

  • 培训内容介绍

    1. 泛型编程概述:理解泛型编程的概念(编写与类型无关的代码),认识模板在C++泛型编程中的核心地位

    2. 函数模板:学习函数模板的定义语法(template <typename T>),掌握模板参数的推断机制

    3. 函数模板实例化:理解隐式实例化和显式实例化,学习函数模板的重载规则

    4. 类模板:掌握类模板的定义语法,学习模板类对象的创建(需指定模板参数)

    5. 类模板成员函数:学习类模板成员函数在类外定义的方式,理解成员函数按需实例化。

    6. 模板参数:了解非类型模板参数(int、指针、引用),掌握默认模板参数的使用

    7. 模板特化:学习函数模板和类模板的特化(为特定类型提供专门实现),掌握全特化语法

    8. 模板偏特化:学习类模板的偏特化(对部分模板参数进行特化),理解偏特化的应用场景

    9. 模板元编程:了解模板元编程的概念(在编译期进行计算),认识其在优化性能、类型推导中的作用

    10. SFINAE:了解"替换失败不是错误"原则,学习enable_if的用法

    11. 可变参数模板:学习C++11的可变参数模板(template<typename... Args>),掌握参数包的展开方法

    12. 模板与继承:学习模板类之间的继承关系,掌握奇特的递归模板模式(CRTP)的基本概念。

    13. 模板与友元:学习模板类中友元声明的各种形式。

 

专题十一:C++标准模板库(STL)

  • 培训对象:需要高效使用C++标准库、提高开发效率的开发人员。

  • 培训目标

    1. 理解STL的架构(容器、算法、迭代器),掌握三大核心组件的协同工作方式

    2. 掌握常用容器(vector、list、deque、map、set)的特点与使用方法

    3. 掌握常用算法(排序、查找、遍历、修改)的使用,学习迭代器的各种类型与用法

  • 培训内容介绍

    1. STL概述:了解C++标准模板库的发展历史,认识STL的六大组件(容器、算法、迭代器、函数对象、适配器、分配器)

    2. 泛型编程与STL:理解STL如何基于泛型编程思想实现数据结构和算法的分离

    3. 迭代器基础:学习迭代器的概念(泛型指针),掌握常用迭代器类型(输入、输出、正向、双向、随机访问)

    4. 序列式容器:学习vector(动态数组)的使用(push_back、pop_back、insert、erase),掌握其内存增长机制

    5. list容器:学习list(双向链表)的使用(push_front、pop_front、sort、merge、unique),了解其与vector的差异

    6. deque容器:学习deque(双端队列)的使用,了解其作为栈和队列的底层实现

    7. 容器适配器:学习stack、queue、priority_queue的使用

    8. 关联式容器:学习set(集合)、multiset(可重复集合)的使用,理解红黑树作为底层实现

    9. 映射容器:学习map(映射)、multimap(可重复映射)的使用,掌握键值对的访问方式

    10. 无序关联容器:学习unordered_set、unordered_map(基于哈希表)的使用,了解与有序容器的性能差异

    11. 算法概述:学习STL算法的分类(非修改式、修改式、排序、数值),了解算法与容器通过迭代器交互的方式

    12. 常用算法:掌握find、find_if、count、count_if、for_each、transform等算法的使用

    13. 排序算法:学习sort、partial_sort、nth_element、stable_sort的使用

    14. 二分查找:掌握binary_search、lower_bound、upper_bound、equal_range的使用

    15. 函数对象:学习函数对象的概念,掌握预定义函数对象(less、greater、plus等)的使用

    16. Lambda表达式:学习C++11的Lambda表达式(()->return type{}),掌握其在STL算法中的应用

 

专题十二:C++输入输出流与文件操作

  • 培训对象:需要进行文件读写、数据序列化的开发人员。

  • 培训目标

    1. 理解C++流类库的层次结构,掌握标准输入输出流的使用

    2. 掌握文件流(ifstream、ofstream、fstream)的打开、读写、关闭操作

    3. 学习字符串流(stringstream)的使用,实现内存中的格式化输入输出

  • 培训内容介绍

    1. C++流体系:了解C++流类库的继承结构(ios_base、ios、istream、ostream、iostream),理解流的输入输出缓冲机制

    2. 标准输入输出:复习cin、cout、cerr、clog的使用,掌握格式化输入输出的方法

    3. 输入输出格式控制:学习格式标志(ios::left、ios::right、ios::dec、ios::hex、ios::scientific),掌握操控器(endl、setw、setprecision、fixed)的使用

    4. 文件流基础:学习文件的打开(open、构造函数参数)、关闭(close)、状态检查(good、fail、bad、eof)

    5. 文本文件读写:掌握文本文件的读写操作(>>、<<、getline),处理文本数据

    6. 二进制文件读写:学习二进制文件的读写(read、write),掌握处理非文本数据(结构体、对象)的方法

    7. 随机访问文件:学习使用seekg、seekp、tellg、tellp进行文件的随机访问

    8. 文件打开模式:掌握不同的文件打开模式(in、out、app、ate、binary、trunc)的组合使用

    9. 字符串流:学习istringstream、ostringstream、stringstream的使用,实现字符串与其他类型的转换

    10. 自定义类型的输入输出:学习重载<<和>>运算符实现自定义类型的流式输入输出

    11. 文件出错检测:学习文件操作的错误检测方法(检查流状态、异常处理)

    12. 多文件操作:学习同时操作多个文件的方法,实现文件复制、合并等操作

 

专题十三:异常处理与程序健壮性

  • 培训对象:需要编写健壮、可靠代码的开发人员。

  • 培训目标

    1. 理解异常处理的概念与意义(分离错误处理与正常逻辑),掌握C++异常处理机制

    2. 掌握try、throw、catch的使用方法,学习多种异常类型的处理

    3. 学习异常安全代码的编写方法,理解异常与资源管理的关系

  • 培训内容介绍

    1. 异常处理概述:了解传统错误处理方式(返回值、错误码)的局限性,认识异常处理的优势

    2. 异常处理语法:掌握try块(监视代码)、throw表达式(抛出异常)、catch块(捕获异常)的基本语法

    3. 异常类型:学习可以抛出任何类型的异常(基本类型、类类型),掌握自定义异常类的设计

    4. 多重catch:掌握多个catch块的使用,理解异常匹配顺序(从上到下,选择第一个匹配的类型)

    5. 捕获所有异常:学习catch(...)捕获所有异常,了解其在资源清理中的应用

    6. 异常传播:理解函数调用栈展开(stack unwinding)的过程,学习异常在函数调用链中的传播机制

    7. 未捕获异常:了解未捕获异常导致程序终止的行为,学习使用set_terminate设置终止处理函数。

    8. 异常规范:了解C++98的动态异常规范(throw()),学习C++11的noexcept说明符

    9. noexcept关键字:掌握noexcept的使用(指定函数不抛出异常),了解其在移动语义和性能优化中的作用

    10. 异常安全的RAII:深入理解RAII(资源获取即初始化)在异常处理中的重要性,学习通过智能指针确保资源释放

    11. 异常安全级别:了解基本保证、强保证、不抛出保证三种异常安全级别,学习编写异常安全代码

    12. 构造函数中的异常:学习处理构造函数中的异常,避免对象构造不完全导致的资源泄漏。

    13. 析构函数与异常:理解析构函数不应抛出异常的原因,学习在析构函数中处理异常的方式。

    14. 标准异常类:学习标准库异常类继承体系(exception、bad_alloc、bad_cast、runtime_error、logic_error)

 

专题十四:C++11/14/17/20新特性

  • 培训对象:需要跟上C++语言发展、掌握现代C++编程范式的开发人员。

  • 培训目标

    1. 了解C++11/14/17/20各版本的核心新特性,掌握现代C++编程风格

    2. 掌握移动语义、完美转发、智能指针等关键特性,编写更高效的代码

    3. 学习使用现代C++特性替代传统写法,提升代码的安全性和表达力。

  • 培训内容介绍

    1. C++11概述:了解C++11作为"现代C++"起点的重要意义,认识其主要改进方向(易用性、性能、安全性)

    2. 自动类型推导:学习auto关键字(自动类型推导),掌握decltype的使用(表达式类型查询)

    3. 范围for循环:学习基于范围的for循环(for (auto x : container)),简化容器遍历

    4. nullptr:理解nullptr的意义(替代NULL,避免整数与指针混淆)

    5. Lambda表达式:深入学习Lambda表达式语法(捕获列表、参数、返回值、函数体),掌握各种捕获方式(值捕获、引用捕获、混合捕获)

    6. 移动语义:理解左值、右值的概念,学习右值引用(&&)的使用,掌握移动构造函数和移动赋值运算符的实现

    7. 完美转发:学习std::forward的使用,掌握参数转发时保持值类别的方法

    8. 智能指针:学习unique_ptr(独占所有权)、shared_ptr(共享所有权)、weak_ptr(弱引用)的使用,了解其与传统指针的优劣

    9. 变长模板:学习可变参数模板(template<typename... Args>),掌握参数包展开技术

    10. 初始化列表:学习统一初始化语法({}),掌握std::initializer_list的使用

    11. 委托构造函数:学习一个构造函数调用另一个构造函数的方法,减少代码重复

    12. 继承构造函数:学习使用using声明继承基类构造函数

    13. constexpr:理解常量表达式的概念,学习constexpr函数和变量的使用,实现在编译期计算

    14. C++14新特性:学习泛型Lambda、Lambda捕获表达式、返回值类型推导、constexpr增强

    15. C++17新特性:学习折叠表达式、结构化绑定、if constexpr、内联变量、文件系统库

    16. C++20新特性:了解概念(concepts)、范围(ranges)、协程(coroutines)、模块(modules)等重大特性

 

专题十五:智能指针与内存管理

  • 培训对象:需要深入理解内存管理、避免内存泄漏的中高级开发人员。

  • 培训目标

    1. 理解智能指针的设计思想(RAII包装裸指针),掌握C++11智能指针的体系

    2. 掌握unique_ptr、shared_ptr、weak_ptr的使用场景与注意事项

    3. 学习循环引用的检测与处理,掌握自定义删除器的编写方法

  • 培训内容介绍

    1. RAII回顾:复习RAII(资源获取即初始化)的核心思想,理解其与智能指针的关系

    2. 裸指针的问题:回顾传统裸指针的问题(忘记释放、异常不安全、重复释放),认识智能指针的必要性。

    3. 智能指针概述:了解C++11智能指针的体系(unique_ptr、shared_ptr、weak_ptr),对比与C++98的auto_ptr

    4. unique_ptr:学习unique_ptr的独占所有权语义,掌握其创建(make_unique)、使用(get、reset、release),了解其无开销的设计

    5. unique_ptr与自定义删除器:学习为unique_ptr指定自定义删除器的方法,处理特殊资源释放。

    6. shared_ptr:学习shared_ptr的共享所有权语义,理解引用计数的工作原理,掌握其创建(make_shared)

    7. shared_ptr的使用:学习shared_ptr的拷贝、赋值、比较,掌握get、use_count、reset、unique等方法

    8. 循环引用问题:理解shared_ptr的循环引用导致的内存泄漏问题,学习使用weak_ptr打破循环

    9. weak_ptr:学习weak_ptr作为观察者,掌握lock方法获取shared_ptr,了解expired方法检测对象是否存活

    10. enable_shared_from_this:学习从this安全地获得shared_ptr的方法,继承enable_shared_from_this并使用shared_from_this

    11. 智能指针与数组:学习使用unique_ptr管理动态数组(unique_ptr<T[]>),了解shared_ptr管理数组的方式。

    12. 智能指针与多线程:了解shared_ptr的引用计数操作是线程安全的,但指向对象的访问需要额外同步。

    13. 自定义删除器:深入学习为shared_ptr指定自定义删除器的方法,处理文件句柄、套接字等资源

    14. 性能考虑:了解智能指针的性能开销(引用计数的原子操作),学习在性能关键场景下的优化方法。

    15. 实际应用:学习在类设计中正确使用智能指针,理解所有权语义在接口设计中的表达。

 

专题十六:并发编程与多线程

  • 培训对象:需要开发多线程程序、提高程序性能的开发人员。

  • 培训目标

    1. 理解并发编程的基本概念(进程、线程、并发、并行),掌握C++11多线程库的使用

    2. 掌握线程的创建、管理、同步机制(互斥锁、条件变量、原子操作)

    3. 学习并发数据结构的设计,避免数据竞争和死锁

  • 培训内容介绍

    1. 并发概述:了解并发编程的价值(充分利用多核CPU、提高响应性),区分进程与线程的概念

    2. std::thread基础:学习创建线程(传递可调用对象),掌握线程的启动、等待(join)、分离(detach)

    3. 线程参数传递:学习向线程函数传递参数(值传递、引用传递),理解参数的生命周期管理

    4. 线程标识:学习获取当前线程ID(std::this_thread::get_id),掌握线程的标识和区分。

    5. 线程的移动语义:学习std::thread的移动语义(线程所有权可以转移),了解只能移动不能复制的特性。

    6. 互斥锁:学习使用std::mutex保护共享数据,掌握lock和unlock的配对使用

    7. 锁守卫:学习std::lock_guard(RAII风格自动解锁),掌握std::unique_lock(提供更灵活的锁管理)

    8. 死锁:理解死锁产生的条件(多个互斥锁交叉等待),学习避免死锁的方法(固定加锁顺序、使用std::lock)

    9. 条件变量:学习std::condition_variable的使用,实现线程间的事件通知机制(wait、notify_one、notify_all)

    10. 原子操作:学习std::atomic模板的使用,实现无锁的原子变量操作

    11. 内存顺序:了解原子操作的内存顺序参数(memory_order_relaxed、memory_order_acquire、memory_order_release、memory_order_seq_cst)

    12. 线程局部存储:学习thread_local关键字,创建线程独有的全局变量。

    13. 异步任务:学习std::async和std::future的使用,简化异步编程模型

    14. std::promise:学习使用std::promise手动设置future的值,实现线程间的值传递

    15. std::packaged_task:学习将可调用对象封装为任务,获取其future结果。

    16. 线程池:了解线程池的概念,学习简单线程池的设计与实现。

    17. 并发数据结构:学习设计线程安全的容器,了解无锁数据结构的基本思想

    18. 异常处理:学习线程中的异常处理(异常在线程边界需要捕获),掌握如何将异常传递给其他线程。

 

专题十七:设计模式与工程实践

  • 培训对象:需要提升软件设计能力、掌握工程化开发方法的开发人员。

  • 培训目标

    1. 理解设计模式的概念与价值,掌握面向对象设计原则(SOLID)

    2. 学习常用创建型、结构型、行为型设计模式的C++实现

    3. 掌握C++特有的惯用法(RAII、Pimpl、CRTP),提升代码质量和复用性。

  • 培训内容介绍

    1. 设计模式概述:了解设计模式作为软件工程最佳实践的集合,认识GoF(四人帮)《设计模式》的重要性

    2. 面向对象设计原则:学习SOLID原则(单一职责、开闭原则、里氏替换、接口隔离、依赖倒置)

    3. RAII惯用法:深入理解RAII(资源获取即初始化)的设计思想,掌握其在资源管理中的应用

    4. Pimpl惯用法:学习Pimpl(指向实现的指针)模式,实现编译防火墙、二进制兼容性

    5. CRTP:学习奇特的递归模板模式(Curiously Recurring Template Pattern),实现静态多态

    6. 创建型模式:单例:学习线程安全的单例模式实现(Meyers单例),了解各种单例实现的优缺点

    7. 创建型模式:工厂方法:学习工厂方法模式,实现对象创建的灵活扩展

    8. 创建型模式:抽象工厂:学习抽象工厂模式,创建相关对象家族

    9. 创建型模式:建造者:学习建造者模式,分离复杂对象的构造和表示

    10. 结构型模式:适配器:学习适配器模式,使不兼容的接口协同工作

    11. 结构型模式:装饰器:学习装饰器模式,动态给对象添加职责

    12. 结构型模式:观察者:学习观察者模式(发布-订阅),实现对象间的一对多依赖

    13. 行为型模式:策略:学习策略模式,定义可互换的算法族

    14. 行为型模式:模板方法:学习模板方法模式,定义算法骨架,延迟具体步骤到子类

    15. 行为型模式:迭代器:学习迭代器模式,统一遍历方式(STL迭代器就是应用)

    16. 代码重构:学习识别代码坏味道,掌握常用重构手法,提高代码质量。

    17. 单元测试:了解单元测试的概念,学习使用Google Test等框架编写测试用例。

    18. 代码审查:学习代码审查的要点,掌握提供和接收建设性反馈的方法

 

专题十八:Qt框架与GUI应用开发

  • 培训对象:需要开发跨平台GUI应用的C++开发人员。

  • 培训目标

    1. 理解Qt框架的架构与设计理念(信号与槽、元对象系统),掌握Qt开发环境搭建

    2. 掌握Qt常用UI组件的使用(布局、控件、对话框、主窗口)

    3. 学习Qt的事件处理、绘图、数据库、网络等高级功能

  • 培训内容介绍

    1. Qt概述:了解Qt作为跨平台C++框架的历史和特点,认识其在不同领域的应用(GUI、嵌入式、移动)

    2. 开发环境搭建:学习安装Qt Creator,配置编译器(MinGW、MSVC),创建第一个Qt项目

    3. 信号与槽机制:理解信号与槽作为Qt核心机制的工作原理,学习使用connect连接信号和槽

    4. 自定义信号与槽:学习在自定义类中定义信号和槽,掌握QObject的继承和Q_OBJECT宏的使用

    5. Qt元对象系统:了解元对象系统(moc)的原理,认识其提供的功能(信号槽、属性、反射)。

    6. UI设计基础:学习使用Qt Designer进行可视化界面设计,掌握.ui文件的处理

    7. 布局管理:学习水平布局(QHBoxLayout)、垂直布局(QVBoxLayout)、网格布局(QGridLayout)的使用

    8. 基础控件:学习QWidget、QLabel、QPushButton、QLineEdit、QComboBox、QListWidget的使用

    9. 主窗口框架:学习QMainWindow的使用(菜单栏、工具栏、状态栏、中心部件)

    10. 对话框:学习QDialog的使用,掌握标准对话框(QFileDialog、QColorDialog、QFontDialog)

    11. 事件处理:学习Qt的事件模型,重写事件处理函数(mousePressEvent、keyPressEvent)

    12. 绘图系统:学习使用QPainter进行绘图(绘制形状、文字、图像),掌握QPen和QBrush的使用。

    13. Qt Model/View:学习MVC架构在Qt中的实现,使用QListView、QTableView与模型交互

    14. QML简介:了解QML声明式语言,学习QML与C++的交互方式

    15. 数据库编程:学习Qt SQL模块的使用,连接数据库(SQLite、MySQL),执行SQL查询

    16. 网络编程:学习QTcpSocket和QUdpSocket的使用,实现网络通信

    17. 多线程在Qt中:学习Qt的线程支持(QThread、QRunnable),了解线程与信号槽的关联。

    18. 文件操作:学习QFile、QDir、QFileInfo的使用,实现文件读写和目录操作

 

专题十九:网络编程基础

  • 培训对象:需要开发网络通信功能的C++开发人员。

  • 培训目标

    1. 理解TCP/IP协议栈的基础知识(IP、端口、TCP/UDP协议)

    2. 掌握Socket编程的基本模型,学习使用原生Socket API(Berkeley sockets)

    3. 学习封装网络通信功能,实现简单的客户端/服务器程序。

  • 培训内容介绍

    1. 网络基础:回顾OSI七层模型和TCP/IP四层模型,理解IP地址、端口号的概念

    2. TCP协议:学习TCP协议的特点(面向连接、可靠、全双工),理解三次握手、四次挥手过程。

    3. UDP协议:学习UDP协议的特点(无连接、不可靠、效率高),对比与TCP的差异

    4. Socket概述:了解Socket作为网络通信接口的概念,掌握Socket编程的基本流程

    5. 地址结构:学习sockaddr_in结构的定义,掌握IP地址转换函数(inet_pton、inet_ntop)。

    6. TCP客户端:学习socket()、connect()的使用,实现TCP客户端的连接和通信

    7. TCP服务器:学习socket()、bind()、listen()、accept()的使用,实现TCP服务器的监听和接受连接

    8. 数据收发:学习send()和recv()函数的使用,处理数据发送和接收的边界问题。

    9. 阻塞与非阻塞:理解阻塞Socket和非阻塞Socket的区别,学习设置Socket为非阻塞模式。

    10. 多线程服务器:学习使用多线程处理多个客户端连接,实现并发服务器

    11. select模型:学习使用select监控多个Socket的状态,实现I/O多路复用

    12. epoll模型:了解epoll作为Linux高性能I/O事件通知机制,学习epoll的使用(适用于高并发场景)

    13. UDP通信:学习recvfrom()和sendto()的使用,实现UDP协议的通信

    14. 广播与组播:了解广播和组播的概念,学习设置Socket支持广播和组播。

    15. 网络字节序:理解大端和小端字节序的区别,学习htons、htonl、ntohs、ntohl等转换函数。

    16. 自定义协议:学习设计简单的应用层协议,实现消息的封包和解包(处理粘包问题)

    17. Socket选项:学习使用setsockopt设置Socket选项(SO_REUSEADDR、SO_KEEPALIVE等)。

    18. 错误处理:学习网络编程中的常见错误处理,使用perror或strerror获取错误信息。

 

专题二十:C++项目实战与代码优化

  • 培训对象:需要综合运用C++知识、完成完整项目开发的中高级开发人员。

  • 培训目标

    1. 掌握中型C++项目的组织架构与构建工具(CMake、Makefile)的使用

    2. 学习代码优化技术(性能分析、编译器优化、代码级优化),提高程序效率

    3. 通过完整项目实践,综合运用所学知识,培养解决实际问题的能力

  • 培训内容介绍

    1. 项目一:高性能内存池设计:实现一个高效的内存池,学习内存管理、对象池技术

    2. 项目架构设计:进行项目需求分析,设计类层次结构和模块划分,绘制UML类图

    3. CMake构建系统:学习编写CMakeLists.txt,配置项目构建、依赖管理、编译选项

    4. 项目二:简单STL实现:实现vector、list、map的核心功能,深入理解STL内部机制

    5. 迭代器实现:学习为自定义容器实现迭代器,使其能够与STL算法协同工作。

    6. 项目三:HTTP服务器:实现一个简单的HTTP服务器,支持静态文件服务、CGI功能

    7. 网络模块设计:封装Socket操作,实现事件驱动机制,处理并发连接。

    8. 协议解析:解析HTTP请求行、头部,构造HTTP响应,处理GET/POST方法。

    9. 项目四:JSON解析器:实现JSON数据的解析和生成,学习递归下降解析技术。

    10. 异常安全设计:在整个项目中贯彻异常安全设计原则,确保资源的正确管理。

    11. 代码性能分析:学习使用性能分析工具(gprof、Valgrind、perf)定位性能瓶颈

    12. 编译器优化:了解编译器优化选项(-O2、-O3),学习使用#pragma optimize指导优化。

    13. 代码级优化:学习常见的优化技巧(减少拷贝、缓存局部性、循环展开、内联)

    14. 代码审查实践:组织代码审查活动,学习提供和接受建设性反馈

    15. 单元测试覆盖:编写全面的单元测试,使用Google Test框架,提高测试覆盖率。

    16. 持续集成:了解持续集成的概念,配置简单的CI流程(GitHub Actions)。

    17. 项目五:迷你数据库:实现简单的键值存储引擎,学习B+树索引的基础实现。

    18. 项目总结:撰写项目文档(设计文档、使用说明),准备项目展示

    19. 代码重构:根据代码审查反馈,进行代码重构,提高代码质量





如果您想学习本课程,请预约报名
如果没找到合适的课程或有特殊培训需求,请订制培训
除培训外,同时提供相关技术咨询与技术支持服务,有需求请发需求表到邮箱soft@info-soft.cn,或致电4007991916
技术服务需求表点击在线申请

服务特点:
海量专家资源,精准匹配相关行业,相关项目专家,针对实际需求,顾问式咨询,互动式授课,案例教学,小班授课,实际项目演示,快捷高效,省时省力省钱。

专家力量:
中国科学院软件研究所,计算研究所高级研究人员
oracle,微软,vmware,MSC,Ansys,candence,Altium,达索等大型公司高级工程师,项目经理,技术支持专家
中科信软培训中心,资深专家或讲师
大多名牌大学,硕士以上学历,相关技术专业,理论素养丰富
多年实际项目经历,大型项目实战案例,热情,乐于技术分享
针对客户实际需求,案例教学,互动式沟通,学有所获
报名表下载
联系我们 更多>>

咨询电话010-62883247

                4007991916

咨询邮箱:soft@info-soft.cn  

 

  微信咨询

随时听讲课

聚焦技术实践

订制培训 更多>>