i007.cc

i007.cc

优先队列-降维打击

05.价值资料

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 + 实战项目

想深入哪个方向?比如:

  • 🎮 游戏开发(内存管理、性能优化)
  • 🔧 系统编程(并发、线程)
  • 📐 模板元编程(高级泛型)
  • 🧪 某个具体特性的深度讲解

发表回复