专题一:C++基础入门与开发环境
专题二:C++核心语法与程序设计
专题三:函数进阶与程序组织
专题四:面向对象编程(类与对象)
专题五:数据的共享与保护
专题六:数组、指针与动态内存管理
专题七:继承与派生
专题八:多态性与虚函数
专题九:运算符重载
专题十:模板编程与泛型
专题十一:C++标准模板库(STL)
专题十二:C++输入输出流与文件操作
专题十三:异常处理与程序健壮性
专题十四:C++11/14/17/20新特性
专题十五:智能指针与内存管理
专题十六:并发编程与多线程
专题十七:设计模式与工程实践
专题十八:Qt框架与GUI应用开发
专题十九:网络编程基础
专题二十:C++项目实战与代码优化
培训对象:零基础入门学员、C语言转型学习者、需要建立C++知识框架的初学者。
培训目标:
了解C++的发展历史、技术特点与应用领域(系统软件、游戏开发、嵌入式、高性能计算),建立对C++语言的整体认知。
掌握C++开发环境的搭建(Visual Studio、g++、Clang、IDE选择),熟悉编译、链接、运行的基本流程。
完成第一个C++程序,理解程序的基本结构和开发过程。
培训内容介绍:
C++语言概述:了解C++的起源(C语言基础上发展)、标准化历程(C++98、C++11、C++14、C++17、C++20),认识C++在不同领域的应用(操作系统、游戏引擎、数据库、金融系统)。
面向对象思想:初步了解面向对象程序设计的基本概念(对象、类、封装、继承、多态),对比与面向过程编程的差异。
开发环境搭建:学习安装Visual Studio、Code::Blocks或配置MinGW/g++,熟悉IDE界面布局(编辑器、编译器、调试器)。
第一个C++程序:编写HelloWorld程序,理解预处理指令(#include)、主函数(main)、输入输出(iostream、cout)。
程序开发流程:掌握编辑、编译、连接、运行、调试的完整流程,理解源文件(.cpp)、头文件(.h)、目标文件、可执行文件的关系。
注释与代码风格:学习单行注释(//)和多行注释(/* */),了解良好的代码风格规范。
命名空间:理解命名空间的概念,学习using namespace std的使用,了解命名空间的作用(避免命名冲突)。
C++对C的扩充:了解C++在非面向对象方面的增强(const、inline函数、函数重载、引用、new/delete)。
编译预处理:学习常用的预处理指令(#include、#define、#ifdef、#pragma once)。
C++标准:了解不同C++标准(C++11/14/17/20)的主要特性,选择适合项目的标准版本。
帮助文档:学习使用cppreference等在线资源,培养查阅文档的能力。
学习路径规划:介绍C++学习的进阶路径,规划个人学习方向。
培训对象:所有C++初学者、需要夯实语法基础的开发人员。
培训目标:
掌握C++的基本语法要素(标识符、关键字、数据类型、运算符),能够编写简单的计算程序。
理解流程控制语句(条件、循环)的用法,能够实现各种业务逻辑流程。
掌握基本输入输出方法,实现与用户的交互。
培训内容介绍:
标识符与关键字:学习C++标识符的命名规则(字母、数字、下划线),掌握C++的保留关键字。
基本数据类型:掌握整型(int、short、long、long long)、浮点型(float、double)、字符型(char)、布尔型(bool)的取值范围和内存占用。
常量与变量:学习变量的声明、定义、初始化,使用const定义常量,了解字面常量的表示。
类型转换:掌握隐式类型转换和显式类型转换(static_cast、C风格强制转换)的规则,理解精度损失问题。
运算符:掌握算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、逗号运算符的使用。
表达式与优先级:理解运算符的优先级和结合性,学习编写复杂的表达式。
流程控制(条件):掌握if-else条件语句、switch-case多分支语句的使用(case穿透、break、default)。
流程控制(循环):掌握while循环、do-while循环、for循环的使用,理解循环嵌套。
流程控制(跳转):学习break、continue、return、goto语句的使用。
输入输出:学习cin进行标准输入,cout进行标准输出,掌握格式化输出(setw、setprecision、fixed)。
枚举类型:了解枚举(enum)的定义与使用,enum class(强类型枚举)。
自定义类型:学习typedef和using定义类型别名。
培训对象:需要掌握模块化编程思想的开发人员。
培训目标:
掌握函数的定义、声明、调用方法,理解参数传递机制(值传递、引用传递、指针传递)。
学习函数重载、内联函数、默认参数等高级特性。
理解递归函数的原理与应用,掌握函数在程序组织中的作用。
培训内容介绍:
函数定义与调用:学习函数的定义语法(返回类型、函数名、参数列表、函数体),掌握函数的调用方式。
函数原型:理解函数声明(原型)的作用,掌握在调用前声明函数的方法。
参数传递:掌握值传递(副本传递)、引用传递(别名传递)、指针传递的区别与适用场景。
返回值:学习return语句的使用,掌握返回值的类型匹配,了解返回引用和返回指针的特殊性。
函数重载:理解函数重载的概念(同名函数不同参数),掌握重载的规则(参数类型、个数、顺序),了解编译器如何区分重载函数。
默认参数:学习带默认参数值的函数定义,掌握默认参数的规则(从右向左连续设置)。
内联函数:理解内联函数的作用(减少函数调用开销),学习inline关键字的用法,了解内联函数的适用场景和限制。
递归函数:理解递归的概念(函数调用自身),学习递归函数的编写方法,掌握递归的终止条件,了解递归的优缺点。
变量的作用域:学习局部变量、全局变量的作用域和生命周期,理解同名变量的遮蔽规则。
变量的存储类别:了解auto、register、static、extern关键字的作用,掌握静态局部变量的特性。
编译预处理:学习文件包含(#include)、宏定义(#define)、条件编译(#ifdef、#ifndef、#endif)的使用。
多文件组织:学习将程序划分为多个源文件和头文件的方法,理解头文件的作用和防止重复包含的技巧。
培训对象:需要理解面向对象思想、掌握类与对象核心概念的开发人员。
培训目标:
理解面向对象编程的核心概念(类、对象、封装、抽象),建立面向对象的思维方式。
掌握类的定义与对象的创建,能够定义类的成员变量和成员函数。
掌握构造函数与析构函数的定义与使用,理解对象生命周期管理。
培训内容介绍:
面向对象概述:理解面向对象程序设计的基本概念(对象、类、封装、继承、多态),对比与面向过程编程的差异。
类与对象的定义:学习类的定义语法(class、struct),掌握成员变量(数据成员)和成员函数(方法)的声明与定义。
访问控制:理解公有(public)、私有(private)、保护(protected)成员的区别,掌握封装性的实现方法。
对象的创建与使用:学习对象的定义(栈对象、堆对象),掌握通过对象名访问成员的方法(.运算符),通过指针访问成员的方法(->运算符)。
构造函数:理解构造函数的作用(初始化对象),学习构造函数的定义(函数名与类名相同、无返回值),掌握重载构造函数。
默认构造函数:了解无参构造函数的特性,学习系统自动生成默认构造函数的规则。
带参数的构造函数:掌握参数化构造对象的多种方式,实现对象的灵活初始化。
成员初始化列表:学习成员初始化列表的语法,了解其在const成员、引用成员初始化中的必要性。
析构函数:理解析构函数的作用(清理资源),学习析构函数的定义(~类名、无参数、无返回值),掌握析构函数的调用时机。
拷贝构造函数:理解拷贝构造函数的作用(用已有对象初始化新对象),学习拷贝构造函数的定义与调用场景。
浅拷贝与深拷贝:理解浅拷贝的问题(指针成员共享内存),学习深拷贝的实现方法。
对象数组:学习对象数组的定义、初始化、遍历使用。
类的组合:学习一个类包含另一个类对象的情况,理解组合关系的构造与析构顺序。
培训对象:需要理解数据共享机制、掌握const语义的开发人员。
培训目标:
掌握静态成员(static)的使用方法,实现类级别的数据共享。
理解友元(friend)机制,掌握友元函数和友元类的使用方法。
掌握const在各种场景下的使用(常对象、常成员函数、常引用)。
培训内容介绍:
作用域与可见性:学习标识符的作用域(全局、局部、类作用域、命名空间),掌握可见性规则。
对象的生存期:理解不同存储类型对象的生存期(静态生存期、动态生存期)。
静态数据成员:理解静态数据成员的概念(属于类而非对象),学习静态数据成员的定义、初始化、访问方式。
静态成员函数:掌握静态成员函数的定义与调用,理解静态成员函数只能访问静态成员的限制。
友元函数:学习友元函数的声明(friend),掌握友元函数访问类私有成员的方法。
友元类:了解友元类的概念,掌握友元类的声明,理解友元关系不能传递的特性。
常对象:学习常对象的定义(const),理解常对象只能调用常成员函数的限制。
常成员函数:掌握在成员函数后加const的语法,理解常成员函数不能修改数据成员的承诺。
常数据成员:学习常数据成员的定义与初始化(必须在初始化列表中)。
常引用:掌握常引用作为函数参数的优势(避免拷贝、保护数据、接受常量参数)。
const与指针:理解指向常量的指针、常指针、指向常量的常指针的区别与应用。
mutable关键字:了解mutable的作用(允许常成员函数修改特定成员)。
volatile关键字:了解volatile的作用(告知编译器变量可能被意外修改)。
培训对象:需要深入理解内存管理、掌握指针高级应用的开发人员。
培训目标:
掌握数组的定义与使用(一维数组、二维数组、对象数组)。
深入理解指针的概念与运算,掌握指针在数组、函数、对象中的应用。
掌握动态内存分配(new/delete),理解堆与栈的区别,避免内存泄漏。
培训内容介绍:
数组的定义与初始化:学习一维数组的定义、初始化方式(聚合初始化)、访问元素,理解数组名的本质。
多维数组:掌握二维数组的定义、初始化、访问,理解行优先存储原则。
对象数组:学习对象数组的定义与使用,掌握构造函数在对象数组创建时的调用方式。
数组作为函数参数:掌握数组作为函数参数的退化机制(退化为指针),学习传递数组长度的方法。
基于范围的for循环:学习C++11的基于范围for循环遍历数组和容器。
指针基础:理解指针的概念(存储地址的变量),掌握指针的定义、初始化、间接访问(*运算符)。
指针运算:学习指针的算术运算(+、-、++、--),理解指针偏移与数组下标的关系。
指针与数组:掌握指针遍历数组的方法,理解数组名作为指针常量的特性。
指针与函数:学习指针作为函数参数(实现输出参数),掌握函数指针的定义与使用(回调函数)。
对象指针:学习指向对象的指针,使用->运算符访问成员,掌握this指针的概念(指向对象自身)。
动态内存分配:理解堆内存与栈内存的区别,学习new运算符分配内存、delete运算符释放内存。
动态数组:学习new[]分配数组、delete[]释放数组,掌握动态数组的访问方法。
指针数组与数组指针:理解指针数组(存放指针的数组)和数组指针(指向数组的指针)的区别。
指向指针的指针:学习二级指针的概念与应用(动态二维数组、修改指针本身)。
内存泄漏与野指针:了解常见内存问题(内存泄漏、野指针、重复释放),学习避免这些问题的方法。
培训对象:需要掌握代码复用技术、构建类层次结构的开发人员。
培训目标:
理解继承的概念与作用(代码复用、建立类间关系),掌握派生类的定义方法。
掌握不同继承方式(公有、保护、私有)对基类成员的访问控制影响。
掌握派生类的构造函数与析构函数定义,理解构造/析构顺序。
培训内容介绍:
继承概述:理解为什么要使用继承(代码复用、表示is-a关系),认识继承在面向对象设计中的重要性。
派生类的声明:学习派生类的定义语法(class 派生类名 : 继承方式 基类名),掌握派生类的构成。
继承方式与访问规则:掌握公有继承(public)、保护继承(protected)、私有继承(private)对基类成员访问属性的影响。
基类成员在派生类中的访问:分析基类公有、保护、私有成员在不同继承方式下的访问属性变化。
派生类构造函数:学习派生类构造函数的定义,掌握向基类构造函数传递参数的方法。
构造/析构顺序:理解派生类对象创建时基类构造函数、派生类构造函数的执行顺序,以及析构时的逆序执行。
同名成员:掌握派生类中定义与基类同名成员的方法,理解同名成员的遮蔽规则。
访问声明:学习使用using声明调整基类成员在派生类中的访问属性。
多重继承:学习多重继承的定义语法,理解多重继承的优缺点。
二义性问题:掌握多重继承中可能出现的二义性问题(名称冲突),学习作用域限定符(::)解决二义性。
虚基类:理解菱形继承问题(钻石继承),学习虚基类的定义(virtual继承),掌握虚基类在解决多重继承冗余数据中的作用。
基类与派生类的转换:理解派生类对象到基类对象的赋值兼容规则,掌握向上转型(派生类指针/引用转换为基类指针/引用)。
培训对象:需要掌握面向对象核心特性——多态的中高级开发人员。
培训目标:
理解静态多态与动态多态的区别,掌握虚函数实现动态多态的机制。
掌握纯虚函数和抽象类的使用,理解接口设计思想。
理解虚函数表(vtable)的基本原理,了解动态联编的性能代价。
培训内容介绍:
多态性概述:理解多态的概念(同一接口,不同实现),区分编译时多态(函数重载、运算符重载)和运行时多态(虚函数)。
虚函数的引入:理解为什么需要虚函数(实现基类指针调用派生类函数),学习虚函数的定义(virtual关键字)。
动态联编:理解静态联编(编译时确定函数调用)和动态联编(运行时确定函数调用)的区别。
虚函数的使用规则:掌握虚函数的声明条件(基类、派生类中同名同参),理解虚函数不能是静态成员、构造函数不能是虚函数。
虚析构函数:理解为什么基类析构函数需要定义为虚函数(确保派生类对象正确析构),学习虚析构函数的定义。
纯虚函数与抽象类:学习纯虚函数的定义(=0),理解抽象类的概念(不能实例化),掌握抽象类作为接口设计的方法。
虚函数表:了解虚函数表(vtable)的基本原理,理解虚函数的调用机制(通过虚函数指针vptr)。
动态多态的实现条件:掌握实现动态多态的三个条件(继承关系、虚函数重写、基类指针/引用调用)。
覆盖(override):理解派生类重写基类虚函数的规则,学习C++11的override关键字(明确表示重写)。
final关键字:学习C++11的final关键字(禁止类被继承、禁止虚函数被重写)。
重载、重写、重定义:区分函数重载、函数重写(覆盖)、函数重定义(隐藏)的概念。
多态的应用场景:学习多态在工厂模式、策略模式、框架设计中的应用。
培训对象:需要为自定义类型定义运算符行为的高级开发人员。
培训目标:
理解运算符重载的概念与意义(使自定义类型像内置类型一样使用)。
掌握运算符重载的两种形式(成员函数形式、友元函数形式),了解各自的适用场景。
掌握常用运算符(赋值、算术、关系、流、下标、自增自减)的重载方法。
培训内容介绍:
运算符重载概述:理解运算符重载的概念(为已有运算符赋予新的含义),认识其在不改变语法规则的前提下扩展运算符适用范围的价值。
重载规则:学习运算符重载的限制(不能创建新运算符、不能改变优先级和结合性、不能改变操作数个数),掌握可重载和不可重载的运算符。
成员函数形式:学习以成员函数形式重载运算符的语法(返回类型 operator@(参数列表)),掌握隐含的this参数。
友元函数形式:学习以友元函数形式重载运算符的语法,了解适用于左操作数不是当前类对象的情况。
赋值运算符重载:掌握赋值运算符(=)的重载(通常返回引用),理解深拷贝的实现,解决浅拷贝问题。
算术运算符重载:学习+、-、*、/等算术运算符的重载,考虑返回临时对象的方式。
关系运算符重载:掌握==、!=、<、>等关系运算符的重载,通常返回bool类型。
流插入/提取运算符重载:学习<<和>>运算符的重载(通常为友元函数),实现自定义类型的输入输出。
下标运算符重载:掌握[]运算符的重载,实现类似数组的访问方式(常函数和非常函数版本)。
自增/自减运算符重载:学习前置++和后置++的重载区别(后置通过int占位参数区分),掌握实现方式。
函数调用运算符重载:理解函数对象(仿函数)的概念,学习()运算符的重载。
类型转换运算符重载:学习自定义类型转换的方式(operator 目标类型())。
new/delete运算符重载:了解重载new和delete的意义(定制内存管理)。
培训对象:需要编写通用代码、实现算法与数据结构复用的开发人员。
培训目标:
理解泛型编程的思想,掌握函数模板和类模板的定义与使用。
学习模板的特化与偏特化技术,满足特定类型的特殊需求。
了解模板元编程的基本概念,认识模板在编译期计算中的应用。
培训内容介绍:
泛型编程概述:理解泛型编程的概念(编写与类型无关的代码),认识模板在C++泛型编程中的核心地位。
函数模板:学习函数模板的定义语法(template <typename T>),掌握模板参数的推断机制。
函数模板实例化:理解隐式实例化和显式实例化,学习函数模板的重载规则。
类模板:掌握类模板的定义语法,学习模板类对象的创建(需指定模板参数)。
类模板成员函数:学习类模板成员函数在类外定义的方式,理解成员函数按需实例化。
模板参数:了解非类型模板参数(int、指针、引用),掌握默认模板参数的使用。
模板特化:学习函数模板和类模板的特化(为特定类型提供专门实现),掌握全特化语法。
模板偏特化:学习类模板的偏特化(对部分模板参数进行特化),理解偏特化的应用场景。
模板元编程:了解模板元编程的概念(在编译期进行计算),认识其在优化性能、类型推导中的作用。
SFINAE:了解"替换失败不是错误"原则,学习enable_if的用法。
可变参数模板:学习C++11的可变参数模板(template<typename... Args>),掌握参数包的展开方法。
模板与继承:学习模板类之间的继承关系,掌握奇特的递归模板模式(CRTP)的基本概念。
模板与友元:学习模板类中友元声明的各种形式。
培训对象:需要高效使用C++标准库、提高开发效率的开发人员。
培训目标:
理解STL的架构(容器、算法、迭代器),掌握三大核心组件的协同工作方式。
掌握常用容器(vector、list、deque、map、set)的特点与使用方法。
掌握常用算法(排序、查找、遍历、修改)的使用,学习迭代器的各种类型与用法。
培训内容介绍:
STL概述:了解C++标准模板库的发展历史,认识STL的六大组件(容器、算法、迭代器、函数对象、适配器、分配器)。
泛型编程与STL:理解STL如何基于泛型编程思想实现数据结构和算法的分离。
迭代器基础:学习迭代器的概念(泛型指针),掌握常用迭代器类型(输入、输出、正向、双向、随机访问)。
序列式容器:学习vector(动态数组)的使用(push_back、pop_back、insert、erase),掌握其内存增长机制。
list容器:学习list(双向链表)的使用(push_front、pop_front、sort、merge、unique),了解其与vector的差异。
deque容器:学习deque(双端队列)的使用,了解其作为栈和队列的底层实现。
容器适配器:学习stack、queue、priority_queue的使用。
关联式容器:学习set(集合)、multiset(可重复集合)的使用,理解红黑树作为底层实现。
映射容器:学习map(映射)、multimap(可重复映射)的使用,掌握键值对的访问方式。
无序关联容器:学习unordered_set、unordered_map(基于哈希表)的使用,了解与有序容器的性能差异。
算法概述:学习STL算法的分类(非修改式、修改式、排序、数值),了解算法与容器通过迭代器交互的方式。
常用算法:掌握find、find_if、count、count_if、for_each、transform等算法的使用。
排序算法:学习sort、partial_sort、nth_element、stable_sort的使用。
二分查找:掌握binary_search、lower_bound、upper_bound、equal_range的使用。
函数对象:学习函数对象的概念,掌握预定义函数对象(less、greater、plus等)的使用。
Lambda表达式:学习C++11的Lambda表达式(()->return type{}),掌握其在STL算法中的应用。
培训对象:需要进行文件读写、数据序列化的开发人员。
培训目标:
理解C++流类库的层次结构,掌握标准输入输出流的使用。
掌握文件流(ifstream、ofstream、fstream)的打开、读写、关闭操作。
学习字符串流(stringstream)的使用,实现内存中的格式化输入输出。
培训内容介绍:
C++流体系:了解C++流类库的继承结构(ios_base、ios、istream、ostream、iostream),理解流的输入输出缓冲机制。
标准输入输出:复习cin、cout、cerr、clog的使用,掌握格式化输入输出的方法。
输入输出格式控制:学习格式标志(ios::left、ios::right、ios::dec、ios::hex、ios::scientific),掌握操控器(endl、setw、setprecision、fixed)的使用。
文件流基础:学习文件的打开(open、构造函数参数)、关闭(close)、状态检查(good、fail、bad、eof)。
文本文件读写:掌握文本文件的读写操作(>>、<<、getline),处理文本数据。
二进制文件读写:学习二进制文件的读写(read、write),掌握处理非文本数据(结构体、对象)的方法。
随机访问文件:学习使用seekg、seekp、tellg、tellp进行文件的随机访问。
文件打开模式:掌握不同的文件打开模式(in、out、app、ate、binary、trunc)的组合使用。
字符串流:学习istringstream、ostringstream、stringstream的使用,实现字符串与其他类型的转换。
自定义类型的输入输出:学习重载<<和>>运算符实现自定义类型的流式输入输出。
文件出错检测:学习文件操作的错误检测方法(检查流状态、异常处理)。
多文件操作:学习同时操作多个文件的方法,实现文件复制、合并等操作。
培训对象:需要编写健壮、可靠代码的开发人员。
培训目标:
理解异常处理的概念与意义(分离错误处理与正常逻辑),掌握C++异常处理机制。
掌握try、throw、catch的使用方法,学习多种异常类型的处理。
学习异常安全代码的编写方法,理解异常与资源管理的关系。
培训内容介绍:
异常处理概述:了解传统错误处理方式(返回值、错误码)的局限性,认识异常处理的优势。
异常处理语法:掌握try块(监视代码)、throw表达式(抛出异常)、catch块(捕获异常)的基本语法。
异常类型:学习可以抛出任何类型的异常(基本类型、类类型),掌握自定义异常类的设计。
多重catch:掌握多个catch块的使用,理解异常匹配顺序(从上到下,选择第一个匹配的类型)。
捕获所有异常:学习catch(...)捕获所有异常,了解其在资源清理中的应用。
异常传播:理解函数调用栈展开(stack unwinding)的过程,学习异常在函数调用链中的传播机制。
未捕获异常:了解未捕获异常导致程序终止的行为,学习使用set_terminate设置终止处理函数。
异常规范:了解C++98的动态异常规范(throw()),学习C++11的noexcept说明符。
noexcept关键字:掌握noexcept的使用(指定函数不抛出异常),了解其在移动语义和性能优化中的作用。
异常安全的RAII:深入理解RAII(资源获取即初始化)在异常处理中的重要性,学习通过智能指针确保资源释放。
异常安全级别:了解基本保证、强保证、不抛出保证三种异常安全级别,学习编写异常安全代码。
构造函数中的异常:学习处理构造函数中的异常,避免对象构造不完全导致的资源泄漏。
析构函数与异常:理解析构函数不应抛出异常的原因,学习在析构函数中处理异常的方式。
标准异常类:学习标准库异常类继承体系(exception、bad_alloc、bad_cast、runtime_error、logic_error)。
培训对象:需要跟上C++语言发展、掌握现代C++编程范式的开发人员。
培训目标:
了解C++11/14/17/20各版本的核心新特性,掌握现代C++编程风格。
掌握移动语义、完美转发、智能指针等关键特性,编写更高效的代码。
学习使用现代C++特性替代传统写法,提升代码的安全性和表达力。
培训内容介绍:
C++11概述:了解C++11作为"现代C++"起点的重要意义,认识其主要改进方向(易用性、性能、安全性)。
自动类型推导:学习auto关键字(自动类型推导),掌握decltype的使用(表达式类型查询)。
范围for循环:学习基于范围的for循环(for (auto x : container)),简化容器遍历。
nullptr:理解nullptr的意义(替代NULL,避免整数与指针混淆)。
Lambda表达式:深入学习Lambda表达式语法(捕获列表、参数、返回值、函数体),掌握各种捕获方式(值捕获、引用捕获、混合捕获)。
移动语义:理解左值、右值的概念,学习右值引用(&&)的使用,掌握移动构造函数和移动赋值运算符的实现。
完美转发:学习std::forward的使用,掌握参数转发时保持值类别的方法。
智能指针:学习unique_ptr(独占所有权)、shared_ptr(共享所有权)、weak_ptr(弱引用)的使用,了解其与传统指针的优劣。
变长模板:学习可变参数模板(template<typename... Args>),掌握参数包展开技术。
初始化列表:学习统一初始化语法({}),掌握std::initializer_list的使用。
委托构造函数:学习一个构造函数调用另一个构造函数的方法,减少代码重复。
继承构造函数:学习使用using声明继承基类构造函数。
constexpr:理解常量表达式的概念,学习constexpr函数和变量的使用,实现在编译期计算。
C++14新特性:学习泛型Lambda、Lambda捕获表达式、返回值类型推导、constexpr增强。
C++17新特性:学习折叠表达式、结构化绑定、if constexpr、内联变量、文件系统库。
C++20新特性:了解概念(concepts)、范围(ranges)、协程(coroutines)、模块(modules)等重大特性。
培训对象:需要深入理解内存管理、避免内存泄漏的中高级开发人员。
培训目标:
理解智能指针的设计思想(RAII包装裸指针),掌握C++11智能指针的体系。
掌握unique_ptr、shared_ptr、weak_ptr的使用场景与注意事项。
学习循环引用的检测与处理,掌握自定义删除器的编写方法。
培训内容介绍:
RAII回顾:复习RAII(资源获取即初始化)的核心思想,理解其与智能指针的关系。
裸指针的问题:回顾传统裸指针的问题(忘记释放、异常不安全、重复释放),认识智能指针的必要性。
智能指针概述:了解C++11智能指针的体系(unique_ptr、shared_ptr、weak_ptr),对比与C++98的auto_ptr。
unique_ptr:学习unique_ptr的独占所有权语义,掌握其创建(make_unique)、使用(get、reset、release),了解其无开销的设计。
unique_ptr与自定义删除器:学习为unique_ptr指定自定义删除器的方法,处理特殊资源释放。
shared_ptr:学习shared_ptr的共享所有权语义,理解引用计数的工作原理,掌握其创建(make_shared)。
shared_ptr的使用:学习shared_ptr的拷贝、赋值、比较,掌握get、use_count、reset、unique等方法。
循环引用问题:理解shared_ptr的循环引用导致的内存泄漏问题,学习使用weak_ptr打破循环。
weak_ptr:学习weak_ptr作为观察者,掌握lock方法获取shared_ptr,了解expired方法检测对象是否存活。
enable_shared_from_this:学习从this安全地获得shared_ptr的方法,继承enable_shared_from_this并使用shared_from_this。
智能指针与数组:学习使用unique_ptr管理动态数组(unique_ptr<T[]>),了解shared_ptr管理数组的方式。
智能指针与多线程:了解shared_ptr的引用计数操作是线程安全的,但指向对象的访问需要额外同步。
自定义删除器:深入学习为shared_ptr指定自定义删除器的方法,处理文件句柄、套接字等资源。
性能考虑:了解智能指针的性能开销(引用计数的原子操作),学习在性能关键场景下的优化方法。
实际应用:学习在类设计中正确使用智能指针,理解所有权语义在接口设计中的表达。
培训对象:需要开发多线程程序、提高程序性能的开发人员。
培训目标:
理解并发编程的基本概念(进程、线程、并发、并行),掌握C++11多线程库的使用。
掌握线程的创建、管理、同步机制(互斥锁、条件变量、原子操作)。
学习并发数据结构的设计,避免数据竞争和死锁。
培训内容介绍:
并发概述:了解并发编程的价值(充分利用多核CPU、提高响应性),区分进程与线程的概念。
std::thread基础:学习创建线程(传递可调用对象),掌握线程的启动、等待(join)、分离(detach)。
线程参数传递:学习向线程函数传递参数(值传递、引用传递),理解参数的生命周期管理。
线程标识:学习获取当前线程ID(std::this_thread::get_id),掌握线程的标识和区分。
线程的移动语义:学习std::thread的移动语义(线程所有权可以转移),了解只能移动不能复制的特性。
互斥锁:学习使用std::mutex保护共享数据,掌握lock和unlock的配对使用。
锁守卫:学习std::lock_guard(RAII风格自动解锁),掌握std::unique_lock(提供更灵活的锁管理)。
死锁:理解死锁产生的条件(多个互斥锁交叉等待),学习避免死锁的方法(固定加锁顺序、使用std::lock)。
条件变量:学习std::condition_variable的使用,实现线程间的事件通知机制(wait、notify_one、notify_all)。
原子操作:学习std::atomic模板的使用,实现无锁的原子变量操作。
内存顺序:了解原子操作的内存顺序参数(memory_order_relaxed、memory_order_acquire、memory_order_release、memory_order_seq_cst)。
线程局部存储:学习thread_local关键字,创建线程独有的全局变量。
异步任务:学习std::async和std::future的使用,简化异步编程模型。
std::promise:学习使用std::promise手动设置future的值,实现线程间的值传递。
std::packaged_task:学习将可调用对象封装为任务,获取其future结果。
线程池:了解线程池的概念,学习简单线程池的设计与实现。
并发数据结构:学习设计线程安全的容器,了解无锁数据结构的基本思想。
异常处理:学习线程中的异常处理(异常在线程边界需要捕获),掌握如何将异常传递给其他线程。
培训对象:需要提升软件设计能力、掌握工程化开发方法的开发人员。
培训目标:
理解设计模式的概念与价值,掌握面向对象设计原则(SOLID)。
学习常用创建型、结构型、行为型设计模式的C++实现。
掌握C++特有的惯用法(RAII、Pimpl、CRTP),提升代码质量和复用性。
培训内容介绍:
设计模式概述:了解设计模式作为软件工程最佳实践的集合,认识GoF(四人帮)《设计模式》的重要性。
面向对象设计原则:学习SOLID原则(单一职责、开闭原则、里氏替换、接口隔离、依赖倒置)。
RAII惯用法:深入理解RAII(资源获取即初始化)的设计思想,掌握其在资源管理中的应用。
Pimpl惯用法:学习Pimpl(指向实现的指针)模式,实现编译防火墙、二进制兼容性。
CRTP:学习奇特的递归模板模式(Curiously Recurring Template Pattern),实现静态多态。
创建型模式:单例:学习线程安全的单例模式实现(Meyers单例),了解各种单例实现的优缺点。
创建型模式:工厂方法:学习工厂方法模式,实现对象创建的灵活扩展。
创建型模式:抽象工厂:学习抽象工厂模式,创建相关对象家族。
创建型模式:建造者:学习建造者模式,分离复杂对象的构造和表示。
结构型模式:适配器:学习适配器模式,使不兼容的接口协同工作。
结构型模式:装饰器:学习装饰器模式,动态给对象添加职责。
结构型模式:观察者:学习观察者模式(发布-订阅),实现对象间的一对多依赖。
行为型模式:策略:学习策略模式,定义可互换的算法族。
行为型模式:模板方法:学习模板方法模式,定义算法骨架,延迟具体步骤到子类。
行为型模式:迭代器:学习迭代器模式,统一遍历方式(STL迭代器就是应用)。
代码重构:学习识别代码坏味道,掌握常用重构手法,提高代码质量。
单元测试:了解单元测试的概念,学习使用Google Test等框架编写测试用例。
代码审查:学习代码审查的要点,掌握提供和接收建设性反馈的方法。
培训对象:需要开发跨平台GUI应用的C++开发人员。
培训目标:
理解Qt框架的架构与设计理念(信号与槽、元对象系统),掌握Qt开发环境搭建。
掌握Qt常用UI组件的使用(布局、控件、对话框、主窗口)。
学习Qt的事件处理、绘图、数据库、网络等高级功能。
培训内容介绍:
Qt概述:了解Qt作为跨平台C++框架的历史和特点,认识其在不同领域的应用(GUI、嵌入式、移动)。
开发环境搭建:学习安装Qt Creator,配置编译器(MinGW、MSVC),创建第一个Qt项目。
信号与槽机制:理解信号与槽作为Qt核心机制的工作原理,学习使用connect连接信号和槽。
自定义信号与槽:学习在自定义类中定义信号和槽,掌握QObject的继承和Q_OBJECT宏的使用。
Qt元对象系统:了解元对象系统(moc)的原理,认识其提供的功能(信号槽、属性、反射)。
UI设计基础:学习使用Qt Designer进行可视化界面设计,掌握.ui文件的处理。
布局管理:学习水平布局(QHBoxLayout)、垂直布局(QVBoxLayout)、网格布局(QGridLayout)的使用。
基础控件:学习QWidget、QLabel、QPushButton、QLineEdit、QComboBox、QListWidget的使用。
主窗口框架:学习QMainWindow的使用(菜单栏、工具栏、状态栏、中心部件)。
对话框:学习QDialog的使用,掌握标准对话框(QFileDialog、QColorDialog、QFontDialog)。
事件处理:学习Qt的事件模型,重写事件处理函数(mousePressEvent、keyPressEvent)。
绘图系统:学习使用QPainter进行绘图(绘制形状、文字、图像),掌握QPen和QBrush的使用。
Qt Model/View:学习MVC架构在Qt中的实现,使用QListView、QTableView与模型交互。
QML简介:了解QML声明式语言,学习QML与C++的交互方式。
数据库编程:学习Qt SQL模块的使用,连接数据库(SQLite、MySQL),执行SQL查询。
网络编程:学习QTcpSocket和QUdpSocket的使用,实现网络通信。
多线程在Qt中:学习Qt的线程支持(QThread、QRunnable),了解线程与信号槽的关联。
文件操作:学习QFile、QDir、QFileInfo的使用,实现文件读写和目录操作。
培训对象:需要开发网络通信功能的C++开发人员。
培训目标:
理解TCP/IP协议栈的基础知识(IP、端口、TCP/UDP协议)。
掌握Socket编程的基本模型,学习使用原生Socket API(Berkeley sockets)。
学习封装网络通信功能,实现简单的客户端/服务器程序。
培训内容介绍:
网络基础:回顾OSI七层模型和TCP/IP四层模型,理解IP地址、端口号的概念。
TCP协议:学习TCP协议的特点(面向连接、可靠、全双工),理解三次握手、四次挥手过程。
UDP协议:学习UDP协议的特点(无连接、不可靠、效率高),对比与TCP的差异。
Socket概述:了解Socket作为网络通信接口的概念,掌握Socket编程的基本流程。
地址结构:学习sockaddr_in结构的定义,掌握IP地址转换函数(inet_pton、inet_ntop)。
TCP客户端:学习socket()、connect()的使用,实现TCP客户端的连接和通信。
TCP服务器:学习socket()、bind()、listen()、accept()的使用,实现TCP服务器的监听和接受连接。
数据收发:学习send()和recv()函数的使用,处理数据发送和接收的边界问题。
阻塞与非阻塞:理解阻塞Socket和非阻塞Socket的区别,学习设置Socket为非阻塞模式。
多线程服务器:学习使用多线程处理多个客户端连接,实现并发服务器。
select模型:学习使用select监控多个Socket的状态,实现I/O多路复用。
epoll模型:了解epoll作为Linux高性能I/O事件通知机制,学习epoll的使用(适用于高并发场景)。
UDP通信:学习recvfrom()和sendto()的使用,实现UDP协议的通信。
广播与组播:了解广播和组播的概念,学习设置Socket支持广播和组播。
网络字节序:理解大端和小端字节序的区别,学习htons、htonl、ntohs、ntohl等转换函数。
自定义协议:学习设计简单的应用层协议,实现消息的封包和解包(处理粘包问题)。
Socket选项:学习使用setsockopt设置Socket选项(SO_REUSEADDR、SO_KEEPALIVE等)。
错误处理:学习网络编程中的常见错误处理,使用perror或strerror获取错误信息。
培训对象:需要综合运用C++知识、完成完整项目开发的中高级开发人员。
培训目标:
掌握中型C++项目的组织架构与构建工具(CMake、Makefile)的使用。
学习代码优化技术(性能分析、编译器优化、代码级优化),提高程序效率。
通过完整项目实践,综合运用所学知识,培养解决实际问题的能力。
培训内容介绍:
项目一:高性能内存池设计:实现一个高效的内存池,学习内存管理、对象池技术。
项目架构设计:进行项目需求分析,设计类层次结构和模块划分,绘制UML类图。
CMake构建系统:学习编写CMakeLists.txt,配置项目构建、依赖管理、编译选项。
项目二:简单STL实现:实现vector、list、map的核心功能,深入理解STL内部机制。
迭代器实现:学习为自定义容器实现迭代器,使其能够与STL算法协同工作。
项目三:HTTP服务器:实现一个简单的HTTP服务器,支持静态文件服务、CGI功能。
网络模块设计:封装Socket操作,实现事件驱动机制,处理并发连接。
协议解析:解析HTTP请求行、头部,构造HTTP响应,处理GET/POST方法。
项目四:JSON解析器:实现JSON数据的解析和生成,学习递归下降解析技术。
异常安全设计:在整个项目中贯彻异常安全设计原则,确保资源的正确管理。
代码性能分析:学习使用性能分析工具(gprof、Valgrind、perf)定位性能瓶颈。
编译器优化:了解编译器优化选项(-O2、-O3),学习使用#pragma optimize指导优化。
代码级优化:学习常见的优化技巧(减少拷贝、缓存局部性、循环展开、内联)。
代码审查实践:组织代码审查活动,学习提供和接受建设性反馈。
单元测试覆盖:编写全面的单元测试,使用Google Test框架,提高测试覆盖率。
持续集成:了解持续集成的概念,配置简单的CI流程(GitHub Actions)。
项目五:迷你数据库:实现简单的键值存储引擎,学习B+树索引的基础实现。
项目总结:撰写项目文档(设计文档、使用说明),准备项目展示。
代码重构:根据代码审查反馈,进行代码重构,提高代码质量。