1. 什么是C++
C++是一种通用编程语言,由Bjarne Stroustrup于1985年在C语言基础上扩展而来。它既支持面向过程编程,也支持面向对象编程和泛型编程,是系统开发、游戏引擎、高性能计算等领域的主流语言。
C++的核心特点包括:
- 高性能:编译型语言,运行效率接近底层硬件。
- 多范式:支持面向过程、面向对象、泛型等多种编程风格。
- 内存可控:提供指针和手动内存管理能力。
- 标准库丰富:STL(标准模板库)提供容器、算法、迭代器等强大工具。
2. 开发环境搭建
学习C++的第一步是搭建开发环境。常用的编译器有GCC、Clang和MSVC,集成开发环境(IDE)推荐Visual Studio、CLion或VS Code。
以Windows系统为例,安装MinGW-w64后,可以在命令行中编译运行C++程序:
g++ hello.cpp -o hello.exe
hello.exe
在Linux或macOS系统中,使用系统自带的g++即可:
g++ hello.cpp -o hello
./hello
3. 第一个C++程序
下面是一个经典的Hello World程序,它展示了C++程序的基本结构:
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
逐行解释这段代码:
#include <iostream>:引入输入输出流标准库。int main():程序入口函数,操作系统从这里开始执行。std::cout:标准输出流对象,用于向控制台打印内容。std::endl:输出换行符并刷新缓冲区。return 0;:返回退出码0,表示程序正常结束。
4. 基本语法与数据类型
C++中的注释有两种写法:单行注释使用//,多行注释使用/* */。
// 这是单行注释
/* 这是
多行注释 */
C++内置的常用数据类型包括:
| 类型 | 说明 | 示例 |
|---|---|---|
| int | 整型 | int age = 18; |
| double | 双精度浮点型 | double pi = 3.14159; |
| char | 字符型 | char grade = 'A'; |
| bool | 布尔型 | bool isReady = true; |
| string | 字符串(需引入string头文件) | string name = "Tom"; |
变量必须先声明后使用,声明格式为类型 变量名 = 初始值;。常量使用const关键字修饰,定义后不可修改:
const double PI = 3.14159;
int count = 10;
count = 20; // 合法,变量可以修改
// PI = 3.14; // 错误,常量不可修改
5. 运算符与表达式
C++支持丰富的运算符,主要包括以下几类:
- 算术运算符:
+、-、*、/、%(取余)。 - 关系运算符:
==、!=、>、<、>=、<=。 - 逻辑运算符:
&&(与)、||(或)、!(非)。 - 赋值运算符:
=、+=、-=、*=、/=。 - 自增自减:
++、--。
下面是一个综合示例:
#include <iostream>
using namespace std;
int main() {
int a = 10, b = 3;
cout << "a + b = " << a + b << endl;
cout << "a / b = " << a / b << endl; // 整数除法,结果为3
cout << "a % b = " << a % b << endl; // 取余,结果为1
cout << "a > b: " << (a > b) << endl; // 输出1(true)
a += 5; // 等价于 a = a + 5
cout << "a = " << a << endl; // 输出15
return 0;
}
6. 流程控制语句
流程控制语句决定程序的执行顺序,主要包括条件判断和循环两大类。
if-else条件判断:
int score = 85;
if (score >= 90) {
cout << "优秀" << endl;
} else if (score >= 60) {
cout << "及格" << endl;
} else {
cout << "不及格" << endl;
}
switch多分支选择:
int day = 3;
switch (day) {
case 1:
cout << "星期一" << endl;
break;
case 2:
cout << "星期二" << endl;
break;
default:
cout << "其他" << endl;
break;
}
for循环:适合已知循环次数的情况。
for (int i = 1; i <= 5; i++) {
cout << "第" << i << "次循环" << endl;
}
while循环:适合条件控制的循环。
int n = 0;
while (n < 5) {
cout << n << endl;
n++;
}
break和continue:break用于跳出整个循环,continue用于跳过本次循环的剩余语句。
7. 函数
函数是组织代码的基本单元,用于封装可复用的逻辑。函数定义包括返回类型、函数名、参数列表和函数体。
#include <iostream>
using namespace std;
// 函数声明
int add(int x, int y);
int main() {
int result = add(3, 5);
cout << "3 + 5 = " << result << endl;
return 0;
}
// 函数定义
int add(int x, int y) {
return x + y;
}
函数支持默认参数和函数重载。默认参数允许调用时省略部分实参,函数重载允许同名函数拥有不同的参数列表:
// 默认参数
int multiply(int a, int b = 2) {
return a * b;
}
// 函数重载
int area(int side) {
return side * side; // 正方形面积
}
int area(int length, int width) {
return length * width; // 长方形面积
}
8. 数组与字符串
数组用于存储同类型元素的集合,声明时需要指定类型和大小。数组下标从0开始。
int scores[5] = {90, 85, 78, 92, 88};
cout << "第一个元素: " << scores[0] << endl;
scores[2] = 80; // 修改第三个元素
// 遍历数组
for (int i = 0; i < 5; i++) {
cout << scores[i] << " ";
}
cout << endl;
C++标准库提供了string类型,使用起来比C风格字符数组更安全方便:
#include <iostream>
#include <string>
using namespace std;
int main() {
string name = "Alice";
string greeting = "Hello, " + name + "!";
cout << greeting << endl;
cout << "字符串长度: " << name.length() << endl;
cout << "第一个字符: " << name[0] << endl;
return 0;
}
9. 指针与引用
指针是C++的重要特性,它存储变量的内存地址。通过指针可以间接访问和修改变量。
int value = 42;
int* ptr = &value; // ptr指向value的地址
cout << "value的值: " << value << endl;
cout << "ptr指向的值: " << *ptr << endl; // 解引用
*ptr = 100; // 通过指针修改变量
cout << "修改后value: " << value << endl;
引用是变量的别名,定义时必须初始化,且不能重新绑定到其他变量:
int num = 10;
int& ref = num; // ref是num的引用
ref = 20; // 修改ref等价于修改num
cout << "num = " << num << endl; // 输出20
函数传参时,使用引用或指针可以避免拷贝大对象,并允许在函数内部修改实参:
void swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
10. 面向对象编程基础
C++支持面向对象编程,核心概念包括类、对象、封装、继承和多态。
类的定义与对象创建:
#include <iostream>
#include <string>
using namespace std;
class Student {
private:
string name;
int age;
public:
// 构造函数
Student(string n, int a) {
name = n;
age = a;
}
// 成员函数
void display() {
cout << "姓名: " << name << ", 年龄: " << age << endl;
}
};
int main() {
Student stu("Tom", 20);
stu.display();
return 0;
}
封装通过访问修饰符实现:private成员只能在类内部访问,public成员对外可见,protected成员对派生类可见。
继承允许派生类复用基类的成员:
class Animal {
public:
void eat() {
cout << "动物在吃东西" << endl;
}
};
class Dog : public Animal {
public:
void bark() {
cout << "汪汪叫" << endl;
}
};
int main() {
Dog dog;
dog.eat(); // 继承自Animal
dog.bark(); // Dog自己的方法
return 0;
}
多态通过虚函数实现,允许通过基类指针调用派生类的重写方法:
class Shape {
public:
virtual void draw() {
cout << "绘制图形" << endl;
}
};
class Circle : public Shape {
public:
void draw() override {
cout << "绘制圆形" << endl;
}
};
int main() {
Shape* shape = new Circle();
shape->draw(); // 输出"绘制圆形"
delete shape;
return 0;
}
11. 标准模板库(STL)入门
STL是C++标准库的核心组成部分,提供通用的数据结构和算法。常用的容器包括vector、map、set等。
vector动态数组:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> nums = {1, 2, 3};
nums.push_back(4); // 末尾添加元素
nums.push_back(5);
// 遍历vector
for (int n : nums) {
cout << n << " ";
}
cout << endl;
cout << "大小: " << nums.size() << endl;
return 0;
}
map键值对容器:
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
map<string, int> ages;
ages["Alice"] = 25;
ages["Bob"] = 30;
cout << "Alice的年龄: " << ages["Alice"] << endl;
// 遍历map
for (auto& pair : ages) {
cout << pair.first << ": " << pair.second << endl;
}
return 0;
}
常用算法:STL的algorithm头文件提供了排序、查找等常用算法。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> nums = {5, 2, 8, 1, 9};
sort(nums.begin(), nums.end()); // 升序排序
for (int n : nums) {
cout << n << " ";
}
cout << endl;
// 查找元素
auto it = find(nums.begin(), nums.end(), 8);
if (it != nums.end()) {
cout << "找到元素: " << *it << endl;
}
return 0;
}
12. 内存管理与智能指针
C++允许手动管理内存,使用new分配堆内存,使用delete释放内存。手动管理容易导致内存泄漏和悬空指针问题,因此现代C++推荐使用智能指针。
// 手动内存管理
int* arr = new int[10];
delete[] arr; // 释放数组内存
C++11引入了三种智能指针,位于<memory>头文件中:
- unique_ptr:独占所有权,不可复制,可移动。
- shared_ptr:共享所有权,通过引用计数管理生命周期。
- weak_ptr:配合shared_ptr使用,不增加引用计数,用于打破循环引用。
#include <iostream>
#include <memory>
using namespace std;
class Demo {
public:
Demo() { cout << "构造" << endl; }
~Demo() { cout << "析构" << endl; }
};
int main() {
// unique_ptr自动释放内存
unique_ptr<Demo> p1(new Demo());
// 推荐使用make_unique
auto p2 = make_unique<Demo>();
// shared_ptr共享所有权
auto p3 = make_shared<Demo>();
auto p4 = p3; // 引用计数加1
return 0;
}
13. 异常处理
异常处理机制让程序在运行时错误发生时能够优雅地恢复。使用try、catch和throw关键字实现。
#include <iostream>
#include <stdexcept>
using namespace std;
double divide(double a, double b) {
if (b == 0) {
throw runtime_error("除数不能为零");
}
return a / b;
}
int main() {
try {
double result = divide(10, 0);
cout << "结果: " << result << endl;
} catch (const exception& e) {
cout << "捕获异常: " << e.what() << endl;
}
return 0;
}
14. 文件读写
C++通过fstream库进行文件操作,支持读文件、写文件和追加模式。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
// 写入文件
ofstream outFile("data.txt");
if (outFile.is_open()) {
outFile << "第一行内容" << endl;
outFile << "第二行内容" << endl;
outFile.close();
}
// 读取文件
ifstream inFile("data.txt");
string line;
if (inFile.is_open()) {
while (getline(inFile, line)) {
cout << line << endl;
}
inFile.close();
}
return 0;
}
15. 学习建议与常见错误
初学者在学习C++时,建议遵循以下路径:先掌握基础语法和数据类型,再学习函数和数组,然后深入指针和面向对象,最后熟悉STL和现代C++特性。
常见错误及注意事项:
- 忘记分号:C++每条语句以分号结尾,漏写会导致编译错误。
- 数组越界:访问数组时下标超出范围会导致未定义行为。
- 内存泄漏:使用
new分配的内存必须用delete释放,推荐使用智能指针。 - 混淆
=和==:赋值运算符和相等运算符含义完全不同。 - 忽略编译警告:编译器警告往往提示潜在问题,应认真对待。
多动手写代码、多调试、多阅读优秀开源项目,是提升C++水平最有效的方式。
https://www.bilibili.com/video/BV1qntX62EFX
https://www.bilibili.com/video/BV1qntX62EFX/
https://www.bilibili.com/video/BV1qntX62ENs
https://www.bilibili.com/video/BV1qntX62ENs/
https://www.bilibili.com/video/BV1qntX62E5p
https://www.bilibili.com/video/BV1qntX62E5p/
https://www.bilibili.com/video/BV1ontX62EW6
https://www.bilibili.com/video/BV1ontX62EW6/
https://www.bilibili.com/video/BV1intX62Etp
https://www.bilibili.com/video/BV1intX62Etp/
https://www.bilibili.com/video/BV1intX62EdT
https://www.bilibili.com/video/BV1intX62EdT/
https://www.bilibili.com/video/BV1qntX62EVR
https://www.bilibili.com/video/BV1qntX62EVR/
https://www.bilibili.com/video/BV1intX62EXP
https://www.bilibili.com/video/BV1intX62EXP/
https://www.bilibili.com/video/BV1intX62EX3
https://www.bilibili.com/video/BV1intX62EX3/
https://www.bilibili.com/video/BV1qntX62ELp
https://www.bilibili.com/video/BV1qntX62ELp/
https://www.bilibili.com/video/BV1ontX62Ey4
https://www.bilibili.com/video/BV1ontX62Ey4/
https://www.bilibili.com/video/BV1qntX62EL8
https://www.bilibili.com/video/BV1qntX62EL8/
https://www.bilibili.com/video/BV1qntX62Ecj
https://www.bilibili.com/video/BV1qntX62Ecj/
https://www.bilibili.com/video/BV1qntX62E5B
https://www.bilibili.com/video/BV1qntX62E5B/
https://www.bilibili.com/video/BV1qntX62E51
https://www.bilibili.com/video/BV1qntX62E51/
https://www.bilibili.com/video/BV1ontX62E3d
https://www.bilibili.com/video/BV1ontX62E3d/
https://www.bilibili.com/video/BV1dqtS6MEy7
https://www.bilibili.com/video/BV1dqtS6MEy7/
https://www.bilibili.com/video/BV1dqtS6MEjo
https://www.bilibili.com/video/BV1dqtS6MEjo/
https://www.bilibili.com/video/BV1jqtS6uEF5
https://www.bilibili.com/video/BV1jqtS6uEF5/
https://www.bilibili.com/video/BV1dqtS6MEhx
https://www.bilibili.com/video/BV1dqtS6MEhx/
https://www.bilibili.com/video/BV1dqtS6MEnq
https://www.bilibili.com/video/BV1dqtS6MEnq/
https://www.bilibili.com/video/BV1dqtS6MEj3
https://www.bilibili.com/video/BV1dqtS6MEj3/
https://www.bilibili.com/video/BV1dqtS6ME8Y
https://www.bilibili.com/video/BV1dqtS6ME8Y/
https://www.bilibili.com/video/BV1dqtS6MEX1
https://www.bilibili.com/video/BV1dqtS6MEX1/
https://www.bilibili.com/video/BV1dqtS6MEyA
https://www.bilibili.com/video/BV1dqtS6MEyA/
https://www.bilibili.com/video/BV1dqtS6MERK
https://www.bilibili.com/video/BV1dqtS6MERK/
https://www.bilibili.com/video/BV1dqtS6MESo
https://www.bilibili.com/video/BV1dqtS6MESo/
https://www.bilibili.com/video/BV1dqtS6MEDP
https://www.bilibili.com/video/BV1dqtS6MEDP/
https://www.bilibili.com/video/BV1dqtS6MED3
https://www.bilibili.com/video/BV1dqtS6MED3/
https://www.bilibili.com/video/BV1dqtS6ME6p
https://www.bilibili.com/video/BV1dqtS6ME6p/
https://www.bilibili.com/video/BV1dqtS6ME7b
https://www.bilibili.com/video/BV1dqtS6ME7b/
https://www.bilibili.com/video/BV1dqtS6ME66
https://www.bilibili.com/video/BV1dqtS6ME66/
https://www.bilibili.com/video/BV1dqtS6MEhf
https://www.bilibili.com/video/BV1dqtS6MEhf/
https://www.bilibili.com/video/BV1dqtS6ME24
https://www.bilibili.com/video/BV1dqtS6ME24/
https://www.bilibili.com/video/BV1dqtS6ME2x
https://www.bilibili.com/video/BV1dqtS6ME2x/
https://www.bilibili.com/video/BV1dqtS6MEJN
https://www.bilibili.com/video/BV1dqtS6MEJN/
https://www.bilibili.com/video/BV1oqtS6MENn
https://www.bilibili.com/video/BV1oqtS6MENn/
https://www.bilibili.com/video/BV1dqtS6MEW1
https://www.bilibili.com/video/BV1dqtS6MEW1/
https://www.bilibili.com/video/BV1oqtS6MEPh
https://www.bilibili.com/video/BV1oqtS6MEPh/
https://www.bilibili.com/video/BV1dqtS6MEpd
https://www.bilibili.com/video/BV1dqtS6MEpd/
https://www.bilibili.com/video/BV1oqtS6MEP2
https://www.bilibili.com/video/BV1oqtS6MEP2/
https://www.bilibili.com/video/BV1dqtS6MErS
https://www.bilibili.com/video/BV1dqtS6MErS/
https://www.bilibili.com/video/BV1dqtS6MEC3
https://www.bilibili.com/video/BV1dqtS6MEC3/
https://www.bilibili.com/video/BV1oqtS6MEKp
https://www.bilibili.com/video/BV1oqtS6MEKp/
https://www.bilibili.com/video/BV1jqtS6uEHG
https://www.bilibili.com/video/BV1jqtS6uEHG/
https://www.bilibili.com/video/BV1jqtS6uEG8
https://www.bilibili.com/video/BV1jqtS6uEG8/
https://www.bilibili.com/video/BV1dqtS6MEJh
https://www.bilibili.com/video/BV1dqtS6MEJh/
https://www.bilibili.com/video/BV1jqtS6uEsy
https://www.bilibili.com/video/BV1jqtS6uEsy/
https://www.bilibili.com/video/BV1dqtS6MEQh
https://www.bilibili.com/video/BV1dqtS6MEQh/
https://www.bilibili.com/video/BV1oqtS6MEN9
https://www.bilibili.com/video/BV1oqtS6MEN9/
https://www.bilibili.com/video/BV1dqtS6MEsj
https://www.bilibili.com/video/BV1dqtS6MEsj/
https://www.bilibili.com/video/BV1LBtS6BExw
https://www.bilibili.com/video/BV1LBtS6BExw/
https://www.bilibili.com/video/BV1RBtS6qEBk
https://www.bilibili.com/video/BV1RBtS6qEBk/
https://www.bilibili.com/video/BV1dBtS6qEJY
https://www.bilibili.com/video/BV1dBtS6qEJY/
https://www.bilibili.com/video/BV1dBtS6qEgD
https://www.bilibili.com/video/BV1dBtS6qEgD/
https://www.bilibili.com/video/BV1RBtS6qEYY
https://www.bilibili.com/video/BV1RBtS6qEYY/
https://www.bilibili.com/video/BV1dBtS6qEcc
https://www.bilibili.com/video/BV1dBtS6qEcc/
https://www.bilibili.com/video/BV1RBtS6qEdC
https://www.bilibili.com/video/BV1RBtS6qEdC/
https://www.bilibili.com/video/BV1dBtS6qEcL
https://www.bilibili.com/video/BV1dBtS6qEcL/
https://www.bilibili.com/video/BV1RBtS6qEBE
https://www.bilibili.com/video/BV1RBtS6qEBE/
https://www.bilibili.com/video/BV1LBtS6BEPP
https://www.bilibili.com/video/BV1LBtS6BEPP/
https://www.bilibili.com/video/BV1dBtS6qEna
https://www.bilibili.com/video/BV1dBtS6qEna/
https://www.bilibili.com/video/BV1dBtS6qEAF
https://www.bilibili.com/video/BV1dBtS6qEAF/
https://www.bilibili.com/video/BV1LBtS6BESC
https://www.bilibili.com/video/BV1LBtS6BESC/
https://www.bilibili.com/video/BV1RBtS6qEoy
https://www.bilibili.com/video/BV1RBtS6qEoy/
https://www.bilibili.com/video/BV1RBtS6qEzV
https://www.bilibili.com/video/BV1RBtS6qEzV/
https://www.bilibili.com/video/BV1dBtS6qE35
https://www.bilibili.com/video/BV1dBtS6qE35/
https://www.bilibili.com/video/BV1LBtS6BE75
https://www.bilibili.com/video/BV1LBtS6BE75/
https://www.bilibili.com/video/BV1dBtS6qEKo
https://www.bilibili.com/video/BV1dBtS6qEKo/
https://www.bilibili.com/video/BV1dBtS6qEA2
https://www.bilibili.com/video/BV1dBtS6qEA2/
https://www.bilibili.com/video/BV1dBtS6qEMH
https://www.bilibili.com/video/BV1dBtS6qEMH/
https://www.bilibili.com/video/BV1RBtS6qESy
https://www.bilibili.com/video/BV1RBtS6qESy/
https://www.bilibili.com/video/BV1dBtS6qEGk
https://www.bilibili.com/video/BV1dBtS6qEGk/
https://www.bilibili.com/video/BV1RBtS6qEf8
https://www.bilibili.com/video/BV1RBtS6qEf8/
https://www.bilibili.com/video/BV1dBtS6qEM8
https://www.bilibili.com/video/BV1dBtS6qEM8/
https://www.bilibili.com/video/BV1RBtS6qEiB
https://www.bilibili.com/video/BV1RBtS6qEiB/
https://www.bilibili.com/video/BV1dBtS6qEH6
https://www.bilibili.com/video/BV1dBtS6qEH6/
https://www.bilibili.com/video/BV1RBtS6qE6f
https://www.bilibili.com/video/BV1RBtS6qE6f/
https://www.bilibili.com/video/BV1dBtS6qEVP
https://www.bilibili.com/video/BV1dBtS6qEVP/
https://www.bilibili.com/video/BV1RBtS6qEfC
https://www.bilibili.com/video/BV1RBtS6qEfC/
https://www.bilibili.com/video/BV1LBtS6BEtk
https://www.bilibili.com/video/BV1LBtS6BEtk/
https://www.bilibili.com/video/BV1LBtS6BEa3
https://www.bilibili.com/video/BV1LBtS6BEa3/
https://www.bilibili.com/video/BV1RBtS6qEvU
https://www.bilibili.com/video/BV1RBtS6qEvU/
https://www.bilibili.com/video/BV1RBtS6qEUZ
https://www.bilibili.com/video/BV1RBtS6qEUZ/
https://www.bilibili.com/video/BV1RBtS6qE6E
https://www.bilibili.com/video/BV1RBtS6qE6E/
https://www.bilibili.com/video/BV1dBtS6qEAJ
https://www.bilibili.com/video/BV1dBtS6qEAJ/
https://www.bilibili.com/video/BV1LBtS6BEup
https://www.bilibili.com/video/BV1LBtS6BEup/
https://www.bilibili.com/video/BV1RBtS6qEfM
https://www.bilibili.com/video/BV1RBtS6qEfM/