欢迎来到「C++学习网」,本网站的教程目标是让你能够轻松的学习C++。
「C++学习网」是免费的学习网站。网站上的教程会手把手教你如何书写,编译以及调试C++程序,同时网站上有大量的程序示例。 成为编程高手并非一朝一夕之功。但只要你有耐心,「C++学习网」会带你上手C++编程。
与其他网站或者书籍不同,本站点假设你没有编程经验。学习过程中,会学到需要的一切知识。 不论是出于兴趣爱好,还是专业的开发者,这里是入门的绝佳地点。
在简介章节,会介绍C++的背景信息。比如,C++是怎么来的,程序是如何运行起来的,需要安装哪些软件来编程。 同时你也会编写出第一个程序。
后续章节会覆盖C++的不同部分。在第一章中,广泛粗浅的介绍许多C++的基础概念。 后续章节会拓展并深入的探讨这些概念,或引入其它的知识。
注:当前内容来源于 learncpp.com( https://www.learncpp.com/ )。大家如果英文较好,建议可以阅读原版,当然本课程更适合中国宝宝体质。另外,大家如果阅读过程中发现任何问题,在评论中留言即可。
有想交流的小伙伴欢迎加入QQ群: 954391896
本页内容学习完成后,可以按需学习以下内容
章节目录
- 第一章 基础知识
- 1.0 程序结构介绍
- 1.1 注释
- 1.2 对象与变量
- 1.3 变量初始化和赋值
- 1.4 iostream:cout、cin和endl简介
- 1.5 未初始化的变量及未定义的行为
- 1.6 关键字和变量命名规则
- 1.7 空白字符与代码样式
- 1.8 字面值和操作符简介
- 1.9 表达式简介
- 1.10 开发第一个程序
- 1.11 第1章总结
- 第二章 函数
- 2.0 函数简介
- 2.1 函数返回值
- 2.2 无返回值函数
- 2.3 函数参数简介
- 2.4 局部变量
- 2.5 为什么需要函数
- 2.6 前向声明
- 2.7 多代码文件程序
- 2.8 命名冲突和名称空间简介
- 2.9 预处理器简介
- 2.10 头文件
- 2.11 头文件保护
- 2.12 设计第一个程序
- 2.13 第2章总结
- 第三章 程序调试
- 3.0 语法和语义错误
- 3.1 程序调试过程
- 3.2 调试策略
- 3.3 基本调试策略
- 3.4 更多调试策略
- 3.5 使用集成调试器:单步执行
- 3.6 断点
- 3.7 监视变量
- 3.8 调用堆栈
- 3.9 在问题变成问题前进行避免
- 3.10 第3章总结
- 第四章 基本数据类型
- 4.0 基本数据类型简介
- 4.1 Void
- 4.2 对象大小和sizeof运算符
- 4.3 有符号整数
- 4.4 无符号整数,以及为什么要避免使用它们
- 4.5 固定宽度整数和size_t
- 4.6 科学记数法
- 4.7 浮点数
- 4.8 布尔值(Boolean)
- 4.9 if语句简介
- 4.10 字符
- 4.11 类型转换和static_cast简介
- 4.12 第4章总结
- 第五章 常量,字符串
- 5.0 常量(命名常量)
- 5.1 常量表达式、编译时常量和运行时常量
- 5.2 Constexpr
- 5.3 字面值常量
- 5.4 数字系统(十进制、二进制、十六进制和八进制)
- 5.5 条件运算符
- 5.6 内联函数和变量
- 5.7 Constexpr和consteval函数
- 5.8 std::string简介
- 5.9 std::string_view简介
- 5.10 std::string_view(第2部分)
- 5.11 第五章总结
- 第六章 运算符
- 6.0 运算符优先级和结合性
- 6.1 算术运算符
- 6.2 余数和指数
- 6.3 自增/自减运算符和副作用
- 6.4 逗号运算符
- 6.5 关系运算符和浮点比较
- 6.6 逻辑运算符
- 6.7 第六章总结
- 第七章 作用域与编译链接
- 7.0 代码块
- 7.1 自定义命名空间和作用域解析操作符
- 7.2 局部变量
- 7.3 全局变量
- 7.4 变量名称遮挡(Variable shadowing)
- 7.5 内部链接
- 7.6 外部链接和变量前向声明
- 7.7 为什么(非常量)全局变量是邪恶的
- 7.8 在多个文件中共享全局常量(使用内联变量)
- 7.9 静态局部变量
- 7.10 作用域、存储期和链接摘要
- 7.11 using声明和using指令
- 7.12 未命名与内联的命名空间
- 7.13 第七章总结
- 第八章 控制流与错误处理
- 8.0 控制流简介
- 8.1 If语句与代码块
- 8.2 常见的if语句问题
- 8.3 Constexpr if语句
- 8.4 Switch语句基础
- 8.5 switch fallthrough机制与作用域
- 8.6 goto语句
- 8.7 循环和while语句简介
- 8.8 Do while语句
- 8.9 for语句
- 8.10 break与continue
- 8.11 提前退出程序
- 8.12 随机数生成简介
- 8.13 使用Mersenne Twister生成随机数
- 8.14 全局随机数
- 8.15 第八章总结
- 第十章 类型转换,类型别名与类型推导
- 10.0 隐式类型转换
- 10.1 数值提升
- 10.2 数值转换
- 10.3 窄化转换、列表初始化和constexpr初始化
- 10.4 算术转换
- 10.5 显式类型转换和static_cast
- 10.6 typedef和类型别名
- 10.7 使用auto关键字的对象类型自动推导
- 10.8 函数的类型推导
- 10.9 第10章总结
- 第十一章 函数重载与函数模版
- 11.0 函数重载简介
- 11.1 被重载函数之间互相区分
- 11.2 函数重载决议
- 11.3 函数的delete说明符
- 11.4 默认参数
- 11.5 函数模板
- 11.6 函数模板实例化
- 11.7 具有多个模板类型的函数模板
- 11.8 非类型模板参数
- 11.9 第11章总结
- 第十二章 复合类型:引用与指针
- 12.0 复合数据类型简介
- 12.1 值类别(左值 lvalue 和右值 rvalue)
- 12.2 左值引用
- 12.3 const的左值引用
- 12.4 通过左值引用传递函数参数
- 12.5 通过常量左值引用传递函数参数
- 12.6 指针简介
- 12.7 空指针
- 12.8 指针与常量
- 12.9 通过指针传递函数参数
- 12.10 通过指针传递函数参数(第2部分)
- 12.11 引用或指针作为函数返回值
- 12.12 输入和输出参数
- 12.13 指针、引用和常量的类型自动推导
- 12.14 第12章总结
- 第十三章 复合类型:枚举与结构体
- 13.0 用户自定义类型简介
- 13.1 非限定作用域枚举
- 13.2 非限定作用域枚举的输入与输出
- 13.3 限定作用域枚举(枚举类)
- 13.4 结构体简介
- 13.5 结构体初始化
- 13.6 成员变量的默认初始化
- 13.7 结构体作为函数的输入与输出
- 13.8 结构体杂项
- 13.9 结构体指针和引用的成员选择操作
- 13.10 类模板
- 13.11 类模板参数推导(CTAD)
- 13.12 模板别名
- 13.13 第13章总结
- 13.14 如何使用c++语言手册
- 第十四章 class介绍
- 14.0 面向对象编程简介
- 14.1 class简介
- 14.2 成员函数
- 14.3 Const类对象和Const成员函数
- 14.4 公共和私有成员以及访问说明符
- 14.5 访问函数
- 14.6 成员函数返回对数据成员的引用
- 14.7 数据隐藏(封装)的好处
- 14.8 构造函数简介
- 14.9 构造函数成员初始化列表
- 14.10 默认构造函数和默认参数
- 14.11 委托构造函数
- 14.12 临时类对象
- 14.13 拷贝构造函数简介
- 14.14 类初始化和拷贝省略
- 14.15 转换构造函数和explicit关键字
- 14.16 第14章总结
- 第十五章 class第二部分
- 15.0 隐藏的“this”指针和成员函数调用
- 15.1 类和头文件
- 15.2 嵌套类型(成员类型)
- 15.3 析构函数简介
- 15.4 具有成员函数的类模板
- 15.5 静态成员变量
- 15.6 静态成员函数
- 15.7 友元非成员函数
- 15.8 友元类和友元成员函数
- 15.9 引用限定符
- 15.10 第15章总结
- 第十六章 动态数组:std::vector
- 16.0 容器和数组简介
- 16.1 std::vector和列表构造函数简介
- 16.2 vector与无符号长度和下标问题
- 16.3 传递std::vector
- 16.4 返回std::vector,移动语义简介
- 16.5 数组和循环
- 16.6 数组、循环和有符号下标
- 16.7 基于范围的for循环(range for / for each)
- 16.8 使用枚举值来作为数组索引
- 16.9 std::vector大小调整和容量
- 16.10 std::vector和栈行为
- 16.11 std::vector<bool>
- 16.12 第16章总结
- 第十七章 固定长度数组:std::array与c样式数组
- 17.0 std::array简介
- 17.1 std::array长度和索引
- 17.2 std::array作为函数参数或返回值
- 17.3 std::array与类类型元素
- 17.4 通过std::reference_wrapper创建引用的数组
- 17.5 std::array和枚举
- 17.6 C样式数组简介
- 17.7 C样式数组退化
- 17.8 指针运算和下标
- 17.9 C样式字符串
- 17.10 常量C样式字符串
- 17.11 多维C样式数组
- 17.12 多维std::array
- 17.13 第17章总结
- 第十八章 迭代器与算法
- 18.0 对数组进行排序
- 18.1 迭代器简介
- 18.2 算法标准库简介
- 18.3 为代码计时
- 第二十章 函数
- 20.0 函数指针
- 20.1 堆和栈
- 20.2 递归
- 20.3 命令行参数
- 20.4 省略号与可变参数(以及为什么要避免它们)
- 20.5 lambda(匿名函数)简介
- 20.6 Lambda捕获
- 20.7 第20章总结
- 第二十一章 操作符重载
- 21.0 操作符重载简介
- 21.1 使用友元函数重载算术运算符
- 21.2 使用普通函数重载运算符
- 21.3 重载I/O运算符
- 21.4 使用成员函数重载运算符
- 21.5 重载一元运算符+、-和!
- 21.6 重载比较运算符
- 21.7 重载递增和递减运算符
- 21.8 重载下标运算符
- 21.9 重载括号运算符
- 21.10 重载类型转换
- 21.11 重载赋值运算符
- 21.12 浅拷贝与深拷贝
- 21.13 重载运算符和函数模板
- 21.14 第21章总结
- 第二十二章 移动语义与智能指针
- 22.0 智能指针和移动语义简介
- 22.1 右值引用
- 22.2 移动构造函数和移动赋值函数
- 22.3 std::move
- 22.4 std::unique_ptr
- 22.5 std::shared_ptr
- 22.6 std::shared_ptr的循环依赖性问题和std::weak_ptr
- 22.7 第22章总结
- 第二十三章 对象关系
- 23.0 对象关系
- 23.1 对象组合
- 23.2 聚合
- 23.3 关联
- 23.4 依赖关系
- 23.5 容器类
- 23.6 std::initializer_list
- 23.7 第23章总结
- 第二十四章 继承
- 24.0 继承简介
- 24.1 基本继承
- 24.2 派生类的构造顺序
- 24.3 派生类的构造函数与初始化
- 24.4 继承和访问说明符
- 24.5 向派生类添加新功能
- 24.6 调用继承的函数与重写行为
- 24.7 隐藏继承的功能
- 24.8 多重继承
- 24.9 第24章总结
- 第二十五章 虚函数
- 25.0 指向派生对象的基类指针和引用
- 25.1 虚函数和多态
- 25.2 override和final说明符
- 25.3 虚析构函数、虚赋值函数以及虚函数重写
- 25.4 静态绑定和动态绑定
- 25.5 虚函数表
- 25.6 纯虚函数、抽象基类和接口类
- 25.7 虚基类
- 25.8 对象切片(Object slicing)
- 25.9 dynamic_cast
- 25.10 使用运算符<<打印继承的类
- 25.11 第25章总结
- 第二十七章 异常
- 27.0 为什么需要异常机制
- 27.1 基本异常处理
- 27.2 异常、函数和堆栈展开
- 27.3 未捕获的异常和捕获所有异常
- 27.4 异常、类和继承
- 27.5 重新抛出异常
- 27.6 函数try块
- 27.7 异常的风险和缺点
- 27.8 异常规格和noexcept
- 27.9 std::move_if_noexcept
- 27.10 第27章总结
- 第二十八章 输入输出(I/O)
- 28.0 输入和输出(I/O)流
- 28.1 使用istream处理输入
- 28.2 使用ostream和ios输出
- 28.3 针对字符串的stream类
- 28.4 流的状态和输入验证
- 28.5 基本文件I/O
- 28.6 随机文件I/O
