C++ 入门全攻略:从基础语法到核心特性

1 C++ 简介

1.1 起源

C++ 诞生于贝尔实验室 ,1979 年开始研发,最初被称为带类的 C,1983 年正式更名为 C++,是在 C 语言基础上扩展面向对象特性的编程语言。

1.2 应用范围

C++ 是高性能通用编程语言,应用场景覆盖:

  • 桌面软件:文字处理、电子表格
  • 底层开发:编译器、操作系统内核
  • 娱乐领域:大型 3D 游戏、游戏引擎
  • 工业 / 嵌入式:工控软件、嵌入式系统

1.3 C++ 与 C 的区别

  • C 语言:面向过程,结构化、模块化设计,专注流程实现
  • C++:兼容 C 所有特性 ,新增面向对象机制(类、继承、多态等),兼顾过程式与面向对象编程

2 常用 C++ 开发工具

根据学习阶段和场景选择,新手推荐轻量化工具,进阶用专业 IDE:

工具 特点 适用场景
记事本 / Notepad++ + 命令行 极简、无依赖 理解编译链接原理
Visual C++ 6.0 经典老工具 兼容旧项目,新系统有兼容性问题
Visual Studio 2015+ 功能强大、生态完整 企业级开发、大型项目
Code::Blocks 开源免费、轻量 专业开发者、新手入门
其他 Dev-C++、CLion、Xcode、C4droid 跨平台 / 移动端开发

3 C++ 基本语法

3.1 核心概念

  • 对象:类的实例,拥有状态和行为
  • :对象的模板,定义对象的属性(状态)和方法(行为)
  • 方法:类的行为实现,一个类可包含多个方法
  • 变量:存储数据的标识符

3.2 注释

C++ 支持两种注释,用于代码说明:

复制代码
// 单行注释:双斜杠开头,注释一行内容

/*
多行注释:斜杠星号开头,星号斜杠结尾
可注释多行内容
*/

3.3 关键字

C++ 保留关键字共 63 个,不能用作标识符 ,常用关键字如下: asm else new this auto enum operator throw bool explicit private true break export protected try case extern public typedef 等。

3.4 标识符

标识符用于命名变量、函数、类等,命名规则

  1. 开头:字母(A-Z/a-z)、下划线_
  2. 后续:字母、下划线、数字(0-9)
  3. 禁止:标点符号(@、&、%)
  4. 区分大小写:Namename 是两个不同标识符

4 数据类型

4.1 基本数据类型

C++ 有7 种基本数据类型 ,搭配类型修饰符(signed/unsigned/short/long)扩展:

表格

类型 占用字节(64 位 Win10+VS2015) 数值范围
bool 1 true/false
char 1 -128~127
short 2 -32768~32767
int 4 -2147483648~2147483647
long 4 同 int
long long 8 -9e18~9e18
float 4 -3.4e38~3.4e38
double 8 -1.7e308~1.7e308
unsigned char 1 0~255
unsigned int 4 0~4294967295

测试代码:查看数据类型大小

复制代码
#include  namespace std;
int main() {
    cout << sizeof(bool) <
    cout <) << " " <(short) < << sizeof(int) <;
    cout <(float) << " " << sizeof(double) <
    system("pause");
    return 0;
}

4.2 类型大小与系统的关系

数据类型占用字节受机器、操作系统、编译器影响

  • 16 位系统:int 占 2 字节
  • 32 位系统:int 占 4 字节
  • 64 位系统:VS 中 long 占 4 字节,GCC 中 long 占 8 字节

4.3 typedef 声明

为已有类型取别名,简化代码:

复制代码
// 语法:typedef 原类型 新名称
typedef int feet;
feet distance; // 等价于 int distance;

4.4 枚举类型

用户定义的整型派生类型,用于限定变量取值范围:

复制代码
// 定义枚举
enum course {math, chinese, english=1, physics, chemistry};
// 默认:math=0, chinese=1, english=1, physics=2, chemistry=3
int main() {
    enum course c = english;
    cout << c << endl; // 输出1
    return 0;
}

5 变量

变量是程序可操作的存储区名称,类型决定存储大小和取值范围。

5.1 变量的声明与定义

  • 声明 :告诉编译器变量存在,不分配内存 ,用extern关键字

  • 定义 :分配内存,可多次声明,只能定义一次

    // 变量声明
    extern int a, b;
    int main() {
    // 变量定义
    int a, b;
    a = 23;
    b = 25;
    return 0;
    }

错误赋值:int x = y = z = 66; 正确赋值:int x=3, y=3, z=3;x = y = z;

5.2 变量作用域

  • 局部变量 :函数 / 代码块内部,仅内部可访问,不自动初始化

  • 全局变量 :函数外部,整个程序生命周期有效,系统自动初始化(int=0,char='\0',指针 = NULL)

    int i = 66; // 全局变量
    int main() {
    int i = 88; // 局部变量,覆盖全局变量
    cout << i <; // 输出88
    return 0;
    }


6 运算符

C++ 运算符分为 6 大类,优先级决定运算顺序(结合性:从左到右 / 从右到左):

6.1 运算符分类

  1. 算术运算符+ - * / % ++ --
  2. 关系运算符== != <= >=
  3. 逻辑运算符&& || !
  4. 位运算符& | ^ ~ `<
  5. 赋值运算符= += -= *= /=
  6. 杂项运算符sizeof ?: , . -> 强制转换、指针&/*

6.2 运算符优先级(从高到低)

后缀运算符 → 一元运算符 → 乘除 → 加减 → 移位 → 关系 → 相等 → 位运算 → 逻辑运算 → 条件 → 赋值 → 逗号


7 流程控制语法

7.1 循环结构

while 循环
复制代码
while(条件) { // 0为false,非0为true
    循环体;
}
for 循环(C++11 增强 for)
复制代码
// 普通for
for(初始化; 条件; 增量) { 循环体; }

// C++11范围for
int array[5] = {11,22,33,44,55};
for(int x : array) { cout < <(auto x : array) { cout << x < } // auto自动推导类型

7.2 判断结构

if-else 判断
复制代码
if(条件1) { 语句1; }
else if(条件2) { 语句2; }
else { 语句3; }
switch 判断
复制代码
switch(表达式) {
    case 常量1: 语句1; break;
    case 常量2: 语句2; break;
    default: 默认语句;
}

注意:casebreak穿透执行 ,多个case可共用语句。

7.3 三元运算符

复制代码
// 条件?真执行:假执行
int a = 10, b = 20;
int max = a > b ? a : b; // max=20

7.4 预处理命令

编译前执行的命令,包括宏定义、文件包含、条件编译

复制代码
// 宏定义
#define PI 3.14
// 文件包含
#include  条件编译
#ifdef DEBUG
    cout <模式" <#else
    cout <发布模式" <
#endif

8 数组

数组是相同类型数据的集合,用下标访问(下标从 0 开始)。

8.1 一维数组

复制代码
// 定义+初始化
int arr1[4] = {1,2,3,4};
int arr2[4] = {1,2}; // 未赋值元素默认为0
int arr3[] = {1,2,3}; // 自动推导长度
// 访问:arr[下标]
cout <1[0]; // 输出1

8.2 二维数组

复制代码
// 定义+初始化
int arr[2][3] = {{1,2,3},{4,5,6}};
int arr2[][3] = {1,2,3,4,5,6}; // 可省略第一维长度
// 访问:arr[行下标][列下标]
cout << arr[0][1]; // 输出2

8.3 字符数组(C 风格字符串)

\0结尾的 char 数组,是 C++ 字符串的基础:

复制代码
char str[] = "hello"; // 等价于 {'h','e','l','l','o','\0'}
cout < 输出hello

8.4 动态数组(new/delete)

复制代码
// 一维动态数组
int* arr = new int[3]{1,2,3};
delete[] arr; // 释放内存

// 二维动态数组
int m=2, n=3;
int** arr2 = new int*[m];
for(int i=0; i<m; i++) arr2[i] = new int[n];

8.5 数组与函数

数组传参本质是传首地址

复制代码
// 一维数组传参
void fun(int arr[], int len) {}
// 二维数组传参(必须指定第二维长度)
void fun2(int arr[][3], int len) {}

8.6 获取数组大小

复制代码
int arr[5];
// 方法1
int len = sizeof(arr)/sizeof(arr[0]);
// 方法2
int len2 = end(arr) - begin(arr);

9 函数

函数是模块化编程的核心 ,C++ 程序有且仅有一个main主函数。

9.1 函数声明与定义

  • 声明:告诉编译器函数存在,参数名可省略

  • 定义:实现函数功能

    // 函数声明
    int max(int a, int b);
    // 函数定义
    int max(int a, int b) {
    return a > b ? a : b;
    }

9.2 参数传递方式

  1. 传值:形参修改不影响实参

  2. 传指针:形参修改影响实参

  3. 传引用:形参修改影响实参(C++ 特色)

    // 传引用
    void swap(int &a, int &b) {
    int temp = a;
    a = b;
    b = temp;
    }

9.3 函数特性

  • 默认参数int sum(int a, int b=2) {return a+b;}
  • 嵌套调用:函数内调用其他函数
  • 递归调用:函数调用自身(需有终止条件)
  • 函数重载 :同名函数,参数类型 / 个数不同
  • 内联函数inline关键字,编译时嵌入主函数,减少调用开销

10 字符串(string)

C++ 支持C 风格字符数组STL string 类,推荐用 string 更安全便捷。

10.1 C 风格字符串

基于 char 数组,依赖\0结束,需用<cstring>库函数操作:

复制代码
char str1[10] = "abc";
strcat(str1, "def"); // 拼接
strcpy(str1, "hello"); // 复制
strcmp(str1, "hello"); // 比较
strlen(str1); // 长度(不含\0)

10.2 C++ string 类

`,支持直接赋值、拼接、比较:

复制代码
#include string str1 = "Hello";
string str2 = "C++";
string str3 = str1 + " " + str2; // 拼接
cout << str3.size(); // 获取长度
cout <.substr(0,5); // 截取子串

11 指针和引用

11.1 指针

指针是存储变量地址的变量*表示指针,&表示取地址:

复制代码
int a = 10;
int* p = &a; // p存储a的地址
cout <解引用,输出a的值10
// 指针运算:p+1 移动sizeof(类型)字节
指针与数组

数组名是首地址常量

复制代码
int arr[3] = {1,2,3};
int* p = arr;
cout <1); // 等价于arr[1],输出2
new/delete 动态内存
复制代码
int* p = new int(10); // 分配单个变量
delete p;
int* arr = new int[3]; // 分配数组
delete[] arr;

11.2 引用

引用是变量的别名,不占内存,定义时必须初始化:

复制代码
int a = 10;
int& b = a; // b是a的引用
b = 20; // 修改b等价于修改a
cout <输出20

引用作为函数返回值时,不能返回局部变量引用


12 自定义数据类型

12.1 结构体(struct)

可包含不同类型成员的自定义类型:

复制代码
struct Person {
    string name;
    int age;
};
// 定义+初始化
Person p = {"张三", 20};
cout <访问成员

12.2 字节对齐

结构体占用空间按字节对齐规则分配,提升内存访问效率。


13 面向对象(核心)

C++ 是面向对象编程语言 ,三大特性:封装、继承、多态

13.1 类与对象

  • :抽象模板,定义属性和方法

  • 对象:类的实例

    class Student {
    private: // 私有成员,仅类内访问
    string name;
    int age;
    public: // 公有成员,外部可访问
    // 构造函数
    Student(string n, int a) {
    name = n;
    age = a;
    }
    // 成员函数
    void show() {
    cout << name << " " <;
    }
    };
    // 创建对象
    Student s("李四", 18);
    s.show();

13.2 继承

派生类继承基类成员,减少代码冗余:

复制代码
// 基类
class Animal {
public:
    void eat() { cout <" <};
// 派生类:公有继承
class Dog : public Animal {
public:
    void bark() { cout <" <};
// 使用
Dog d;
d.eat(); // 继承基类方法
d.bark();

13.3 多继承与虚基类

  • 多继承:一个类继承多个基类

  • 虚基类:virtual继承,解决多继承二义性,仅保留一份基类成员

    class A { /* ... / };
    class B : virtual public A { /
    ... / };
    class C : virtual public A { /
    ... / };
    class D : public B, public C { /
    ... */ };


14 多态和虚函数

14.1 向上转型

派生类对象 / 指针 / 引用赋值给基类,仅能访问基类成员。

14.2 虚函数

virtual声明,实现动态多态,运行时确定调用函数:

复制代码
class Base {
public:
    virtual void show() { cout < <
class Derive : public Base {
public:
    void show() { cout << "派生类" << endl; }
};
int main() {
    Base* p = new Derive();
    p->show(); // 输出派生类(多态)
    delete p;
    return 0;
}

14.3 纯虚函数与抽象类

  • 纯虚函数:virtual void show() = 0;
  • 抽象类:包含纯虚函数,不能创建对象,仅作为基类使用

15 运算符重载

赋予运算符自定义功能,本质是函数重载:

复制代码
class Vector {
public:
    int x, y;
    Vector(int x=0, int y=0) : x(x), y(y) {}
    // 重载+运算符
    Vector operator+(const Vector& v) {
        return Vector(x+v.x, y+v.y);
    }
};
int main() {
    Vector v1(1,2), v2(3,4);
    Vector v3 = v1 + v2;
    cout < << " " <.y; // 输出4 6
    return 0;
}

不能重载的运算符:. .* :: sizeof ?:


16 IO 流与文件操作

16.1 标准 IO 流

  • cin:标准输入(键盘)

  • cout:标准输出(屏幕)

  • cerr/clog:错误输出

    #include std;
    int main() {
    int a;
    cin >> a; // 输入
    cout < << a < 输出
    return 0;
    }

16.2 文件操作

C++ 用fstream库操作文件,支持文本文件二进制文件

复制代码
#include // 写入文件
ofstream out("test.txt");
out <++";
out.close();
// 读取文件
ifstream in("test.txt");
string str;
in >> str;
cout <();

17 泛型与模板

模板是泛型编程 的核心,实现代码复用,支持函数模板和类模板。

17.1 函数模板

复制代码
template<class T> // T为泛型类型
T max(T a, T b) {
    return a > b ? a : b;
}
int main() {
    cout << max(1,2); // int类型
    cout <,2.2); // double类型
    return 0;
}

17.2 类模板

复制代码
template
class Box {
private:
    T data;
public:
    Box(T d) : data(d) {}
    T getData() { return data; }
};
int main() {
    Box b(10);
    cout <
    return 0;
}

18 命名空间与异常处理

18.1 命名空间

解决命名冲突 ,C++ 标准库都在std命名空间:

复制代码
namespace MySpace {
    int a = 10;
    void fun() { cout <自定义空间" < }
}
// 使用
using namespace MySpace; // 引入整个空间
cout <

### 18.2 异常处理
`try`检查异常,`throw`抛出异常,`catch`捕获异常:
```cpp
try {
    throw 10; // 抛出int类型异常
} catch(int e) {
    cout <捕获异常:" <;
} catch(...) { // 捕获所有异常
    cout <异常";
}

19 STL 标准模板库

STL 是 C++通用数据结构与算法集合,核心三大组件:

19.1 容器

  • 顺序容器:vector(动态数组)、dequelist
  • 关联容器:setmapmultimap
  • 容器适配器:stackqueuepriority_queue

19.2 迭代器

遍历容器的指针 - like工具:

复制代码
vector = {1,2,3};
vectoriterator it;
for(it = v.begin(); it != v.end(); it++) {
    cout < <```

### 19.3 算法
STL提供70+通用算法(`#include <algorithm>`):
```cpp
#include 
vector {3,1,2};
sort(v.begin(), v.end()); // 排序
find(v.begin(), v.end(), 2); // 查找

总结

本文覆盖 C++入门到进阶所有核心知识点,从基础语法到面向对象、模板、STL,搭配可直接运行的代码示例,适合新手系统学习。

C++ 学习建议:

  1. 先掌握语法和基础数据类型,多写简单程序
  2. 深入理解指针、引用、面向对象三大特性
  3. 熟练使用 STL 容器和算法,提升开发效率
  4. 结合项目实践,巩固知识点
相关推荐
_Aaron___2 小时前
Spring AI 2.0 之后,MCP Server 该按远程企业服务来设计
java·人工智能·spring
NE_STOP2 小时前
Docker--Docker简介及系统架构
java
我是一颗柠檬2 小时前
【JDK8新特性】接口默认方法与静态方法Day8
java·开发语言·后端·intellij-idea
lulu12165440782 小时前
【开发者指南】Gemini 3.5开发入门:从API调用到Agent构建
java·开发语言·人工智能·python·ai编程
盲敲代码的阿豪2 小时前
Python 爬虫入门基础教程:从入门到实践
开发语言·爬虫·python
SimonKing2 小时前
从单机到高并发:手搓唯一编号的生成方案
java·后端·程序员
我能坚持多久2 小时前
STL详解——stack以及queue的模拟实现
开发语言·c++·学习
无限进步_3 小时前
【C++】智能指针的设计逻辑:RAII与资源安全
c++·算法·安全