C++ 适合初学者的学习笔记整理

归纳总结 C++ 的核心语法体系,掌握 C++ 编程的基础,建立清晰的语法框架,区分不同版本的特性,并理解各语法点的适用场景。以下是从基础到进阶的 C++ 语法完整归纳,兼顾实用性和系统性。

一、C++ 语法核心体系(按学习逻辑划分)

1. 基础语法(C++98/03 核心)
1.1 程序结构与基本要素

cpp

运行

复制代码
#include <iostream>  // 头文件引入
using namespace std; // 命名空间使用(避免重复写std::)

// 主函数:程序入口,返回int类型
int main() {
    // 输出语句(分号结束)
    cout << "Hello, C++" << endl;
    return 0; // 程序正常退出返回0
}
  • 核心规则
    • 语句以;结尾,代码块用{}包裹;
    • 大小写敏感(int aint A是不同变量);
    • 注释:单行//,多行/* ... */
1.2 数据类型

表格

类别 具体类型 说明
基本类型 int/float/double 整型 / 单精度浮点 / 双精度浮点
char/bool 字符型(1 字节)/ 布尔型
修饰符 short/long/long long 短整型 / 长整型 / 超长整型
unsigned/signed 无符号 / 有符号(默认 signed)
复合类型 数组、指针、引用 基于基本类型扩展
自定义类型 结构体 (struct)、枚举 (enum) 用户自定义类型

示例

cpp

运行

复制代码
// 基本类型
int age = 20;
double score = 95.5;
char ch = 'A';
bool isOk = true;

// 数组
int arr[5] = {1, 2, 3, 4, 5}; // 固定长度数组
// 指针(存储内存地址)
int* p = &age; // p指向age的地址
*p = 21; // 解引用,修改age的值为21

// 引用(变量的别名,必须初始化)
int& ref = age;
ref = 22; // age也变为22
1.3 控制流语句
  • 条件语句

    cpp

    运行

    复制代码
    // if-else
    if (age > 18) {
        cout << "成年" << endl;
    } else if (age == 18) {
        cout << "刚成年" << endl;
    } else {
        cout << "未成年" << endl;
    }
    
    // switch(适合多分支等值判断)
    switch (score / 10) {
        case 10:
        case 9: cout << "优秀"; break; // break避免穿透
        case 8: cout << "良好"; break;
        default: cout << "及格/不及格";
    }
  • 循环语句

    cpp

    运行

    复制代码
    // for循环(适合已知循环次数)
    for (int i = 0; i < 5; i++) {
        cout << i << " "; // 输出:0 1 2 3 4
    }
    
    // while循环(适合未知循环次数)
    int num = 10;
    while (num > 0) {
        num--;
    }
    
    // do-while(至少执行一次)
    do {
        cout << "至少执行一次" << endl;
    } while (false);
    
    // 循环控制:break(终止循环)、continue(跳过本次)
    for (int i = 0; i < 5; i++) {
        if (i == 2) continue; // 跳过i=2
        if (i == 4) break;    // 终止循环
        cout << i << " "; // 输出:0 1 3
    }
1.4 函数

cpp

运行

复制代码
// 函数声明(原型):返回值 函数名(参数列表)
int add(int a, int b);

// 函数定义:实现逻辑
int add(int a, int b) {
    return a + b;
}

// 函数调用
int result = add(3, 5); // result=8

// 重载函数:同名不同参数(参数个数/类型/顺序不同)
double add(double a, double b) {
    return a + b;
}

// 带默认参数的函数(默认参数放最后)
int multiply(int a, int b = 2) {
    return a * b;
}
multiply(3); // 3*2=6
multiply(3, 4); // 3*4=12
2. 面向对象(OOP)核心语法(C++ 核心特性)
2.1 类与对象

cpp

运行

复制代码
// 类定义:封装属性和方法
class Person {
private: // 私有(仅类内部访问,默认private)
    string name;
    int age;

public: // 公有(对外暴露的接口)
    // 构造函数:创建对象时初始化,无返回值,与类同名
    Person(string n, int a) : name(n), age(a) {} // 初始化列表(推荐)

    // 析构函数:销毁对象时调用,释放资源,~+类名,无参数无返回值
    ~Person() {
        cout << "对象销毁" << endl;
    }

    // 成员方法
    void showInfo() {
        cout << "姓名:" << name << " 年龄:" << age << endl;
    }

    // 友元函数:突破封装,可访问私有成员(全局函数)
    friend void printPerson(Person p);
};

// 友元函数实现
void printPerson(Person p) {
    cout << "友元访问:" << p.name << " " << p.age << endl;
}

// 对象创建与使用
Person p1("张三", 20); // 栈对象
p1.showInfo();
printPerson(p1);

Person* p2 = new Person("李四", 25); // 堆对象(需手动释放)
p2->showInfo();
delete p2; // 释放堆内存,调用析构函数
2.2 继承与多态

cpp

运行

复制代码
// 继承:子类复用父类代码,语法:class 子类 : 继承方式 父类
// 继承方式:public(公有的继承)、protected(保护的)、private(私有的,默认)
class Student : public Person {
private:
    int score;
public:
    // 子类构造函数:先调用父类构造
    Student(string n, int a, int s) : Person(n, a), score(s) {}

    // 重写父类方法(多态基础)
    void showInfo() override { // override关键字:显式重写,编译器检查
        cout << "姓名:" << name << " 年龄:" << age << " 分数:" << score << endl;
    }

    // 静态成员:属于类,所有对象共享
    static int count; // 声明
};

// 静态成员初始化(类外)
int Student::count = 0;

// 多态:父类指针/引用指向子类对象,调用子类重写的方法
// 前提:父类方法加virtual(虚函数)
// 修改Person类的showInfo为虚函数:
// virtual void showInfo() { ... }

Person* ptr = new Student("王五", 18, 90);
ptr->showInfo(); // 调用Student的showInfo(多态效果)
delete ptr;

// 纯虚函数与抽象类:纯虚函数=0,抽象类不能实例化,子类必须重写
class Shape {
public:
    virtual double getArea() = 0; // 纯虚函数
};

class Circle : public Shape {
private:
    double r;
public:
    Circle(double r) : r(r) {}
    double getArea() override {
        return 3.14 * r * r;
    }
};
3. 进阶语法(C++11 及以上)
3.1 智能指针(解决内存泄漏)

cpp

运行

复制代码
#include <memory> // 头文件

// unique_ptr:独占所有权,不能拷贝
unique_ptr<int> up(new int(10));
// unique_ptr<int> up2 = up; // 错误:不能拷贝
up.reset(); // 释放资源

// shared_ptr:共享所有权,引用计数
shared_ptr<int> sp1(new int(20));
shared_ptr<int> sp2 = sp1; // 引用计数=2
cout << sp1.use_count() << endl; // 输出2
sp1.reset(); // 引用计数=1
sp2.reset(); // 引用计数=0,释放资源

// make_shared(推荐:更高效)
auto sp3 = make_shared<int>(30);
3.2 自动类型推导

cpp

运行

复制代码
// auto:编译器推导类型(必须初始化)
auto a = 10; // int
auto b = 3.14; // double
auto c = make_shared<int>(5); // shared_ptr<int>

// decltype:推导表达式类型
int x = 10;
decltype(x) y = 20; // y是int
3.3 范围 for 循环

cpp

运行

复制代码
vector<int> vec = {1, 2, 3, 4, 5};
// 遍历容器,无需关心下标
for (auto num : vec) {
    cout << num << " ";
}
// 引用遍历(修改元素)
for (auto& num : vec) {
    num *= 2;
}
3.4 Lambda 表达式(匿名函数)

cpp

运行

复制代码
// 语法:[捕获列表](参数列表) -> 返回值类型 { 函数体 }
// 捕获列表:[]无捕获、[=]值捕获、[&]引用捕获、[this]捕获当前对象
auto add = [](int a, int b) -> int {
    return a + b;
};
cout << add(3, 5) << endl; // 8

// 捕获外部变量
int base = 10;
auto addBase = [base](int a) {
    return a + base;
};
cout << addBase(5) << endl; // 15
3.5 空指针与 nullptr

cpp

运行

复制代码
// C++11前用NULL(本质是0),易混淆
int* p = NULL;
// C++11用nullptr(专门的空指针类型)
int* q = nullptr;
4. 容器与算法(STL 核心)

cpp

运行

复制代码
#include <vector> // 动态数组
#include <map>    // 键值对
#include <algorithm> // 算法

// vector:动态数组,自动扩容
vector<int> vec;
vec.push_back(1); // 添加元素
vec.push_back(2);
vec.pop_back(); // 删除最后一个元素
cout << vec[0] << endl; // 访问元素

// map:有序键值对,基于红黑树
map<string, int> mp;
mp["张三"] = 20;
mp["李四"] = 25;
// 遍历map
for (auto& pair : mp) {
    cout << pair.first << " : " << pair.second << endl;
}

// 算法:排序、查找等
vector<int> nums = {3, 1, 4, 2, 5};
sort(nums.begin(), nums.end()); // 升序排序
// 查找元素
auto it = find(nums.begin(), nums.end(), 3);
if (it != nums.end()) {
    cout << "找到:" << *it << endl;
}

二、C++ 语法关键注意事项

  1. 内存管理
    • 栈对象自动销毁,堆对象(new)必须用delete释放,否则内存泄漏;
    • 优先使用智能指针(unique_ptr/shared_ptr)替代裸指针。
  2. const 关键字
    • const int a:常量,值不可改;
    • int const* p:指针指向的内容不可改;
    • int* const p:指针本身不可改;
    • const成员函数void show() const,不能修改成员变量。
  3. 重载与重写区别
    • 重载:同一作用域、同名、参数不同;
    • 重写:父子类、同名、参数相同、父类方法加virtual
  4. C++11 + 特性兼容
    • 编译时需指定标准(如g++ -std=c++11 test.cpp);
    • 优先使用现代特性(智能指针、auto、Lambda)提升代码安全性和简洁性。

总结

  1. 基础层:掌握数据类型、控制流、函数是 C++ 的入门核心,需注意语法规范(分号、作用域);
  2. 核心层:面向对象(类、继承、多态)是 C++ 的灵魂,重点理解封装、继承、多态三大特性,以及构造 / 析构函数的生命周期;
  3. 进阶层:C++11 及以上的现代特性(智能指针、Lambda、auto)能大幅提升代码质量,STL 容器与算法是实际开发的核心工具;
  4. 关键原则:内存管理是 C++ 的重点和难点,优先使用 RAII(资源获取即初始化)思想(如智能指针)避免内存泄漏。

掌握以上语法体系,你可以覆盖绝大多数 C++ 开发场景,后续可针对具体方向(如高性能编程、嵌入式开发)深化相关语法的应用。

相关推荐
ujainu6 小时前
让笔记触手可及:为 Flutter + OpenHarmony 鸿蒙记事本添加实时搜索(二)
笔记·flutter·openharmony
曦月逸霜6 小时前
Python快速入门——学习笔记(持续更新中~)
笔记·python·学习
AI视觉网奇6 小时前
blender 导入fbx 黑色骨骼
学习·算法·ue5·blender
星火开发设计6 小时前
this 指针:指向对象自身的隐含指针
开发语言·数据结构·c++·学习·指针·知识
梵刹古音6 小时前
【C++】构造函数
开发语言·c++
Gain_chance6 小时前
37-学习笔记尚硅谷数仓搭建-ADS层分析并以各品牌商品下单统计为例
笔记·学习
Ronin3056 小时前
持久化数据管理中心模块
开发语言·c++·rabbitmq·gtest
魔力军6 小时前
Rust学习Day2: 变量与可变性、数据类型和函数和控制流
开发语言·学习·rust
黄大帅@lz6 小时前
openai提示词学习
windows·学习