C++核心特性
我来教你C++的核心特性!下面是一个系统的学习路径,涵盖最重要的概念。
🔷 一、基础类型与内存模型
值类型 vs 引用类型
cpp
int a = 10; int& ref = a; // 引用:ref 和 a 是同一块内存 int* ptr = &a; // 指针:ptr 存储 a 的地址 ref = 20; // a 变为 20 *ptr = 30; // a 变为 30
栈 vs 堆
cpp
int x = 5; // 栈上分配,自动释放 int* p = new int(5); // 堆上分配,需手动释放 delete p; // 释放堆内存,否则内存泄漏
🔷 二、面向对象(OOP)
类与构造函数
cpp
class Animal {
private:
std::string name;
int age;
public:
// 构造函数(初始化列表)
Animal(std::string n, int a) : name(n), age(a) {}
// 成员函数
void speak() const {
std::cout << name << " says hello!" << std::endl;
}
};
继承与多态
cpp
class Dog : public Animal {
public:
Dog(std::string n) : Animal(n, 0) {}
// 重写虚函数
void speak() const override {
std::cout << "Woof!" << std::endl;
}
};
Animal* a = new Dog("Rex");
a->speak(); // 输出 "Woof!" —— 运行时多态
🔷 三、现代C++核心(C++11/14/17)
智能指针(取代裸指针)
cpp
#include <memory>
// unique_ptr:独占所有权
auto p1 = std::make_unique<int>(42);
// shared_ptr:共享所有权,引用计数
auto p2 = std::make_shared<std::string>("hello");
auto p3 = p2; // 引用计数 +1,两者共享同一对象
核心原则:现代C++中几乎不应手动
new/delete
移动语义(性能关键)
cpp
std::vector<int> a = {1, 2, 3};
std::vector<int> b = std::move(a); // "移动"而非复制
// 此时 a 为空,b 拥有数据 —— 零拷贝,高效!
Lambda 表达式
cpp
auto add = [](int x, int y) { return x + y; };
std::cout << add(3, 4); // 7
// 捕获外部变量
int offset = 10;
auto addOffset = [offset](int x) { return x + offset; };
auto 与类型推导
cpp
auto x = 3.14; // double
auto v = std::vector<int>{1,2,3}; // vector<int>
// 范围for循环
for (const auto& item : v) {
std::cout << item << " ";
}
🔷 四、模板(泛型编程)
cpp
// 函数模板
template<typename T>
T maxVal(T a, T b) {
return (a > b) ? a : b;
}
maxVal(3, 5); // int 版本
maxVal(3.1, 2.9); // double 版本
// 类模板
template<typename T>
class Stack {
std::vector<T> data;
public:
void push(T val) { data.push_back(val); }
T pop() { T v = data.back(); data.pop_back(); return v; }
};
🔷 五、STL 标准库
| 容器 | 用途 |
|---|---|
vector |
动态数组,随机访问 |
map / unordered_map |
键值对(有序/哈希) |
set |
不重复元素集合 |
queue / stack |
队列/栈 |
cpp
#include <algorithm>
std::vector<int> v = {5, 3, 1, 4, 2};
std::sort(v.begin(), v.end()); // 排序
auto it = std::find(v.begin(), v.end(), 3); // 查找
std::for_each(v.begin(), v.end(), [](int x){ std::cout << x; });
🔷 六、学习路线建议
第1周:基础语法 + 指针 + 引用
第2周:OOP(类、继承、多态、虚函数)
第3周:现代C++(智能指针、移动语义、Lambda)
第4周:模板 + STL + 实战项目
想深入哪个方向?比如:
- 🎮 游戏开发(内存管理、性能优化)
- 🔧 系统编程(并发、线程)
- 📐 模板元编程(高级泛型)
- 🧪 某个具体特性的深度讲解
