一、C++语言概述
1.1 历史背景与发展
C++由Bjarne Stroustrup于1985年在贝尔实验室开发,最初命名为"C with Classes"。作为C语言的扩展,它在保持高效内存操作能力的同时,引入了面向对象编程特性。2023年发布的C++23标准展现了语言的持续发展,现广泛应用于:
- 操作系统开发(如Windows/Linux内核)
- 游戏引擎(Unreal/Unity底层)
- 高频交易系统
- 嵌入式系统
- 科学计算
- 图形图像处理等关键领域
语言发展里程碑:
- 1983年:正式命名为C++
- 1998年:第一个ISO标准C++98
- 2011年:重大更新C++11
- 2020年:C++20引入模块等新特性
1.2 核心特性与优势
-
多范式支持:
- 过程式编程(类似C语言)
- 面向对象编程(类、继承、多态)
- 泛型编程(模板)
- 函数式编程(lambda表达式)
-
硬件级控制:
-
高性能:
- 编译型语言
- 执行效率接近汇编级别
- 无运行时垃圾回收开销
-
丰富标准库:
- STL(标准模板库)
- 容器(vector, map等)
- 算法(sort, find等)
- 输入输出流
-
跨平台能力:
二、开发环境配置
2.1 编译器选择
| 工具名称 | 适用平台 | 主要特点 | 典型应用场景 |
|---|
| GCC/G++ | Linux/macOS | 开源标准实现,支持最新C++标准 | 服务器开发,开源项目 | | Microsoft Visual C++ | Windows | 集成VS开发环境,调试工具强大 | Windows应用程序开发 | | Clang | 跨平台 | 错误提示友好,编译速度快 | 跨平台项目,开发工具链 | | Intel C++ Compiler | x86平台 | 针对Intel处理器优化 | 高性能计算,数值分析 |
2.2 第一个C++程序
- #include <iostream> // 引入标准输入输出流头文件
- using namespace std; // 使用标准命名空间
- // 程序入口函数
- int main() {
- // 输出Hello World到控制台
- cout << "Hello, World!" << endl;
-
- // 程序正常结束返回0
- return 0;
- }
复制代码
代码解析:
- #include - 引入输入输出流库,提供cout/cin等对象
- using namespace std - 避免每次都要写std::前缀
- main() - 程序的唯一入口函数,操作系统从这里开始执行
- cout - 标准输出流对象,配合<<运算符输出内容
- << - 流插入运算符,可链式拼接多个输出
- endl - 输出换行符并刷新缓冲区
- return 0 - 向操作系统返回程序执行状态码
编译运行步骤:
- 保存为hello.cpp
- 命令行执行:g++ hello.cpp -o hello
- 运行:./hello (Linux/macOS) 或 hello.exe (Windows)
三、核心语法要点
3.1 基础数据类型
| 类型 | 存储大小 | 取值范围 | 示例 | 使用场景 |
|---|
| int | 4字节(通常) | -2^31 ~ 2^31-1 | int age = 30; | 计数器,年龄等整数 | | float | 4字节 | 3.4E±38 | float pi = 3.14f; | 单精度浮点数 | | double | 8字节 | 1.7E±308 | double salary = 8500.50; | 高精度计算,财务数据 | | bool | 1字节 | true/false | bool isReady = true; | 逻辑判断标志 | | char | 1字节 | -128~127 | char grade = 'A'; | 单个字符存储 |
类型修饰符:
- signed/unsigned:有无符号
- short/long:大小修饰
- const:常量
类型转换:
- int a = 10;
- double b = 3.14;
- double c = a + b; // 隐式转换
- int d = (int)b; // 显式转换
复制代码
3.2 流程控制结构
条件分支:
- int score = 85;
- if(score >= 90) {
- cout << "A级";
- } else if(score >= 75) {
- cout << "B级";
- } else {
- cout << "C级";
- }
- // switch-case结构
- char grade = 'B';
- switch(grade) {
- case 'A':
- cout << "优秀";
- break;
- case 'B':
- cout << "良好";
- break;
- default:
- cout << "其他";
- }
复制代码
循环结构:
- // for循环 - 已知循环次数
- for(int i=0; i<5; i++) {
- cout << i << " ";
- }
- // while循环 - 条件控制
- int j = 5;
- while(j > 0) {
- cout << j-- << " ";
- }
- // do-while循环 - 至少执行一次
- int k = 0;
- do {
- cout << k++ << " ";
- } while(k < 3);
复制代码
循环控制语句:
- break:立即退出循环
- continue:跳过本次迭代
- goto:跳转到标签位置(慎用)
四、面向对象编程
4.1 类与对象
- class Rectangle {
- private: // 私有成员,外部不可直接访问
- double width, height;
-
- public: // 公有接口
- // 构造函数 - 对象创建时自动调用
- Rectangle(double w, double h) : width(w), height(h) {}
-
- // 成员函数 - 计算面积
- double area() const {
- return width * height;
- }
-
- // setter/getter方法
- void setWidth(double w) { width = w; }
- double getWidth() const { return width; }
- };
- // 使用示例
- Rectangle rect(3.0, 4.0);
- cout << "面积:" << rect.area();
- rect.setWidth(5.0);
复制代码
类设计原则:
- 封装性:隐藏内部实现细节
- 单一职责:一个类只做一件事
- 接口清晰:提供简洁的公有方法
4.2 三大特性实现
1. 封装:
- class BankAccount {
- private:
- double balance; // 私有数据成员
-
- public:
- void deposit(double amount) {
- if(amount > 0) balance += amount;
- }
-
- double getBalance() const {
- return balance;
- }
- };
复制代码
2. 继承:
- // 基类
- class Shape {
- protected:
- string color;
- public:
- virtual double area() const = 0; // 纯虚函数
- };
- // 派生类
- class Circle : public Shape {
- private:
- double radius;
- public:
- Circle(double r) : radius(r) {}
-
- double area() const override {
- return 3.14 * radius * radius;
- }
- };
复制代码
3. 多态:
- Shape* shapes[3];
- shapes[0] = new Circle(2.0);
- shapes[1] = new Rectangle(3.0, 4.0);
- for(int i=0; i<2; i++) {
- cout << shapes[i]->area() << endl; // 运行时多态
- }
复制代码
五、标准模板库(STL)入门
5.1 常用容器
vector动态数组:
- #include <vector>
- using namespace std;
- vector<int> nums = {1,2,3};
- nums.push_back(4); // 尾部添加
- nums.pop_back(); // 尾部删除
- nums.insert(nums.begin(), 0); // 头部插入
- for(int num : nums) { // 范围for循环
- cout << num << " ";
- }
- cout << "容量:" << nums.capacity();
复制代码
map键值对集合:
- #include <map>
- map<string, int> ages;
- // 插入元素
- ages["Alice"] = 25;
- ages.insert(make_pair("Bob", 30));
- // 查找元素
- auto it = ages.find("Alice");
- if(it != ages.end()) {
- cout << it->second; // 输出25
- }
- // 遍历
- for(const auto& pair : ages) {
- cout << pair.first << ": " << pair.second << endl;
- }
复制代码
5.2 算法应用
- #include <algorithm>
- #include <vector>
- vector<int> v = {5,3,9,1};
- // 排序
- sort(v.begin(), v.end()); // 升序
- sort(v.rbegin(), v.rend()); // 降序
- // 查找
- auto it = find(v.begin(), v.end(), 3);
- if(it != v.end()) {
- cout << "找到元素位置:" << it - v.begin();
- }
- // 其他常用算法
- reverse(v.begin(), v.end()); // 反转
- int sum = accumulate(v.begin(), v.end(), 0); // 求和
- int cnt = count(v.begin(), v.end(), 5); // 计数
复制代码
六、学习路线建议
阶段式学习路径
基础阶段(1-2个月)
- 掌握核心语法:
- 数据类型与变量
- 运算符与表达式
- 流程控制结构
- 函数与作用域
- 理解内存模型:
- 完成100+编码练习:
进阶阶段(3-6个月)
实战阶段(6个月以上)
-
个人项目:
-
参与开源:
- GitHub上寻找C++项目
- 从解决简单issue开始
- 学习代码审查流程
-
性能优化:
推荐学习资源
书籍:
- 入门:《C++ Primer》(第5版)
- 进阶:《Effective C++》(Scott Meyers)
- 专家级:《Modern C++ Design》(Andrei Alexandrescu)
- 实战:《C++ Concurrency in Action》(Anthony Williams)
在线资源:
- 参考网站:cplusplus.com、cppreference.com
- 教程:LearnCPP.com、Microsoft Learn C++
- 社区:Stack Overflow、Reddit的r/cpp
开发工具:
- IDE:Visual Studio、CLion、Qt Creator
- 编辑器:VS Code + C/C++插件
- 构建工具:CMake、Makefile
- 调试工具:GDB、LLDB
实践平台:
- LeetCode(算法练习)
- Codewars(编程挑战)
- GitHub(项目实战)
|