C++语法大全笔记

C++ 语法大全笔记

C++ 语法体系庞大,涵盖基础语法、面向对象、泛型编程等核心模块。以下按 “基础→进阶→高级” 逻辑梳理,兼顾实用性与易记性,适合学习和查阅。

一、基础语法

1. 程序结构与入口

cpp
 
运行
 
 
 
 
#include <iostream>  // 头文件包含
using namespace std; // 命名空间(避免std::前缀)

int main() {         // 程序入口(main函数)
    cout << "Hello C++" << endl; // 输出
    return 0;        // 返回值(0表示正常结束)
}
 

2. 数据类型

类型 说明 示例
基本类型 int、char、double 等 int a = 10;
常量 const 修饰 const float PI = 3.14;
枚举 enum 定义 enum Color {Red, Green, Blue};
自定义类型 struct/class struct Point {int x; int y;};

3. 变量与运算符

  • 变量声明类型 变量名 = 初始值;(如double score = 95.5;
  • 常用运算符
    • 算术:+、-、*、/、%(取模仅适用于整数)
    • 逻辑:&&(与)、||(或)、!(非)
    • 位运算:&(与)、|(或)、^(异或)、<<(左移)
    • 三目运算符:条件 ? 表达式1 : 表达式2(如max = a > b ? a : b;

4. 控制流

(1)条件判断

cpp
 
运行
 
 
 
 
if (score >= 90) {
    cout << "优秀";
} else if (score >= 60) {
    cout << "及格";
} else {
    cout << "不及格";
}

switch (num) {
    case 1: cout << "一"; break; // break避免穿透
    case 2: cout << "二"; break;
    default: cout << "其他";
}
 

(2)循环

cpp
 
运行
 
 
 
 
// for循环(已知次数)
for (int i = 0; i < 10; i++) {
    cout << i << " ";
}

// while循环(未知次数)
int n = 5;
while (n > 0) {
    cout << n-- << " ";
}

// do-while循环(至少执行一次)
do {
    cout << "至少执行一次";
} while (false);
 

5. 数组与字符串

(1)数组

cpp
 
运行
 
int arr[5] = {1, 2, 3, 4, 5}; // 固定长度数组
cout << arr[0]; // 访问第一个元素(索引从0开始)
 

(2)字符串

cpp
 
运行
 
char str[] = "Hello"; // C风格字符串
string s = "World";   // C++ string类(需#include <string>)
s += "!";             // 拼接
cout << s.size();     // 获取长度
 

二、函数与指针

1. 函数定义与调用

cpp
 
运行
 
// 函数声明(可放头文件)
int add(int a, int b);  

// 函数定义
int add(int a, int b) {
    return a + b;
}

// 调用
int sum = add(3, 5); // sum=8
 

函数重载:同名函数,参数列表不同

cpp
 
运行
int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; }
 

2. 指针与引用

(1)指针:存储变量地址的变量

cpp
 
运行
int a = 10;
int* p = &a; // p指向a的地址
*p = 20;     // 修改a的值(a变为20)
 

(2)引用:变量的别名(更安全)

cpp
 
运行
int a = 10;
int& ref = a; // ref是a的引用
ref = 20;     // a变为20
 

3. 内存管理

  • 动态分配new(分配)/delete(释放)
    cpp
     
    运行
     
    int* arr = new int[5]; // 动态数组
    delete[] arr;          // 释放数组(加[])
     
  • 智能指针(C++11+,避免内存泄漏):
    cpp
     
    运行
     
    unique_ptr<int> p(new int(10)); // 独占指针
    shared_ptr<int> q = make_shared<int>(20); // 共享指针
     

三、面向对象编程(OOP)

1. 类与对象

cpp
 
运行
 
class Student {
private: // 私有成员(仅类内访问)
    string name;
    int score;

public: // 公有成员(外部可访问)
    // 构造函数(初始化对象)
    Student(string n, int s) : name(n), score(s) {}

    // 成员函数
    void showInfo() {
        cout << name << ": " << score << endl;
    }

    // 析构函数(释放资源)
    ~Student() {}
};

// 创建对象
Student stu("Alice", 90);
stu.showInfo();
 

2. 封装、继承、多态

(1)封装:隐藏数据,通过接口访问(如上述 Student 类)

(2)继承:复用父类代码

cpp
 
运行
 
class Graduate : public Student { // 公有继承
private:
    string research;

public:
    Graduate(string n, int s, string r) : Student(n, s), research(r) {}
};
 

(3)多态:父类指针指向子类对象,调用子类重写方法

cpp
 
运行
 
class Shape {
public:
    virtual void draw() { cout << "Shape" << endl; } // 虚函数
};

class Circle : public Shape {
public:
    void draw() override { cout << "Circle" << endl; } // 重写
};

Shape* s = new Circle();
s->draw(); // 输出Circle(多态)
 

3. 访问控制

  • public:类内外均可访问
  • private:仅类内访问
  • protected:类内 + 子类访问

四、泛型编程(模板)

1. 函数模板

cpp
 
运行
 
template <typename T> // 模板参数
T max(T a, T b) {
    return a > b ? a : b;
}

// 调用
cout << max(3, 5) << endl;   // int类型
cout << max(3.5, 2.8) << endl; // double类型
 

2. 类模板

cpp
 
运行
 
template <typename T>
class Box {
private:
    T data;

public:
    Box(T d) : data(d) {}
    T getData() { return data; }
};

// 使用
Box<int> box1(10);
Box<string> box2("Hello");
 

五、标准模板库(STL)

1. 常用容器

容器 说明 示例
vector 动态数组 vector<int> v = {1,2,3};
map 键值对(有序) map<string, int> m{{"a",1}};
unordered_map 键值对(无序) unordered_map<int, string> um;
list 双向链表 list<int> l = {4,5,6};

2. 常用算法(需 #include <algorithm>)

cpp
 
运行
 
vector<int> v = {3,1,2};
sort(v.begin(), v.end()); // 排序(升序)
reverse(v.begin(), v.end()); // 反转
 

六、高级特性

1. 异常处理

cpp
 
运行
 
 
 
 
try {
    int a = 10 / 0; // 异常源
} catch (exception& e) {
    cout << "错误:" << e.what() << endl;
}
 

2. Lambda 表达式(C++11+)

cpp
 
运行
 
auto add = [](int a, int b) { return a + b; };
cout << add(3,5) << endl; // 输出8
 

3. 命名空间

cpp
 
运行
 
 
namespace MySpace {
    int num = 10;
}
cout << MySpace::num << endl; // 访问命名空间成员
 

七、易错点总结

  1. 数组越界:访问arr[5]时需确保数组长度≥6;
  2. 内存泄漏:动态分配的内存(new)需用delete释放;
  3. 虚函数遗漏:多态需父类声明virtual,子类override
  4. 字符串拼接:C 风格字符串不能直接用+,需用strcat或 C++ string 类。
这份笔记覆盖 C++ 核心语法,建议结合代码实践加深理解,遇到细节可查阅官方文档或《C++ Primer》补充~
posted @ 2025-11-27 10:50  炖猪脚  阅读(0)  评论(0)    收藏  举报