C++入门知识大全(一)

简介: 教程来源 https://app-a87ujc988w01.appmiaoda.com/ C++由斯特劳斯特鲁普于1979年创建,是兼具高效与强大抽象能力的静态编译型语言。支持面向对象、泛型编程与RAII等特性,广泛应用于系统编程、游戏开发、高性能计算等领域。本指南涵盖环境搭建、基础语法、控制流等核心内容,助初学者夯实根基。

C++由Bjarne Stroustrup于1979年在贝尔实验室开始设计,最初称为“C with Classes”,1983年正式命名为C++。作为C语言的超集,C++在保持高效的同时,引入了面向对象、泛型编程、RAII、模板元编程等强大特性,成为系统编程、游戏开发、高性能计算、嵌入式系统等领域的首选语言。本文将为初学者提供一份全面的C++入门指南,从环境搭建到基础语法,从面向对象到标准库,助你构建扎实的编程基础。
a7b1db4f-eb2c-4b46-8883-ad94ea9e956d.png

一、初识C++:为什么学习C++?
1.1 C++是什么?
C++是一种静态类型、编译型、通用编程语言,支持面向过程、面向对象、泛型编程、函数式编程等多种范式。它以其零开销抽象的设计哲学著称,意味着你只为你使用的特性付出性能代价。

1.2 C++的核心优势
image.png
1.3 C++的应用领域
游戏开发:Unreal Engine、Unity底层

操作系统:Windows、Linux内核部分

高性能计算:科学计算、金融建模

数据库:MySQL、MongoDB核心

嵌入式系统:汽车、医疗设备

编译器/解释器:LLVM、V8引擎

二、环境搭建:工欲善其事,必先利其器
2.1 编译器安装
C++是编译型语言,需要将源代码编译为可执行文件。

Windows用户:

安装MinGW-w64或Visual Studio(推荐Visual Studio Community,功能全面)

配置环境变量

Mac用户:

# 安装Xcode命令行工具
xcode-select --install
# 或通过Homebrew安装GCC
brew install gcc

Linux用户(Ubuntu/Debian):

sudo apt update
sudo apt install g++ build-essential

2.2 验证安装

g++ --version
clang++ --version   # 如果安装了Clang

2.3 开发工具选择
image.png
VS Code推荐插件:

C/C++ (Microsoft)

CMake Tools

Code Runner

2.4 第一个C++程序
创建第一个C++程序 hello.cpp:

#include <iostream>
#include <string>

int main() {
    // 输出到控制台
    std::cout << "你好,C++世界!" << std::endl;

    // 获取用户输入
    std::string name;
    std::cout << "请输入你的名字:";
    std::cin >> name;

    std::cout << "欢迎你," << name << "!" << std::endl;

    return 0;
}

编译和运行:

# 编译
g++ hello.cpp -o hello

# 运行
./hello     # Linux/Mac
hello.exe   # Windows

三、C++基础语法

3.1 基本语法规则

#include <iostream>

/*
 * 这是一个多行注释
 * 用于说明程序功能
 */

int main() {
    // 单行注释:这是程序入口

    // 语句以分号结束
    std::cout << "Hello, C++!" << std::endl;

    // 代码块使用花括号{}
    if (true) {
        std::cout << "这是代码块" << std::endl;
    }

    return 0;  // 返回0表示程序正常结束
}

3.2 变量与数据类型
C++是静态类型语言,变量必须先声明后使用。

#include <iostream>
#include <string>
#include <climits>  // 整数类型极限
#include <cfloat>   // 浮点类型极限

int main() {
    // ========== 基本数据类型 ==========
    // 整数类型
    int age = 25;                    // 4字节,-2^31 ~ 2^31-1
    short score = 100;               // 2字节
    long bigNum = 100000L;           // 4或8字节
    long long veryBig = 10000000000LL; // 8字节

    // 无符号整数
    unsigned int uAge = 25;          // 非负整数
    unsigned char byte = 255;        // 0~255

    // 浮点类型
    float price = 19.99f;            // 4字节,单精度
    double pi = 3.14159265358979;    // 8字节,双精度
    long double precise = 3.14159265358979323846L; // 扩展精度

    // 字符类型
    char grade = 'A';                // 单字符,单引号
    wchar_t wideChar = L'中';        // 宽字符
    char16_t utf16 = u'中';          // UTF-16
    char32_t utf32 = U'中';          // UTF-32

    // 布尔类型
    bool isStudent = true;           // true 或 false

    // ========== 类型大小 ==========
    std::cout << "int大小:" << sizeof(int) << " 字节" << std::endl;
    std::cout << "double大小:" << sizeof(double) << " 字节" << std::endl;
    std::cout << "bool大小:" << sizeof(bool) << " 字节" << std::endl;

    // ========== 类型极限 ==========
    std::cout << "int最大值:" << INT_MAX << std::endl;
    std::cout << "int最小值:" << INT_MIN << std::endl;
    std::cout << "double精度:" << DBL_DIG << " 位有效数字" << std::endl;

    // ========== auto类型推导 ==========
    auto x = 10;          // 推导为int
    auto y = 3.14;        // 推导为double
    auto z = "hello";     // 推导为const char*

    // ========== decltype类型推导 ==========
    int a = 10;
    decltype(a) b = 20;   // b的类型与a相同

    return 0;
}

3.3 变量命名规范

// 有效标识符
int age;           // 小写字母开头
int student_age;   // 下划线分隔
int studentAge;    // 驼峰命名(常用)
int _internal;     // 下划线开头(通常表示内部变量)

// 常量使用大写字母
const int MAX_SIZE = 100;
constexpr double PI = 3.14159;

// 命名规则:
// 1. 只能包含字母、数字、下划线
// 2. 不能以数字开头
// 3. 不能使用关键字(int、if、return等)
// 4. 区分大小写

3.4 运算符

#include <iostream>

int main() {
    int a = 10, b = 3;

    // ========== 算术运算符 ==========
    std::cout << "a + b = " << a + b << std::endl;   // 13
    std::cout << "a - b = " << a - b << std::endl;   // 7
    std::cout << "a * b = " << a * b << std::endl;   // 30
    std::cout << "a / b = " << a / b << std::endl;   // 3(整数除法)
    std::cout << "a % b = " << a % b << std::endl;   // 1(取余)

    // ========== 自增自减 ==========
    int x = 5;
    std::cout << "x++ = " << x++ << std::endl;  // 先使用后自增:5
    std::cout << "++x = " << ++x << std::endl;  // 先自增后使用:7

    // ========== 关系运算符 ==========
    std::cout << "a > b = " << (a > b) << std::endl;   // 1(真)
    std::cout << "a == b = " << (a == b) << std::endl; // 0(假)

    // ========== 逻辑运算符 ==========
    bool flag1 = true, flag2 = false;
    std::cout << "flag1 && flag2 = " << (flag1 && flag2) << std::endl;  // 与:0
    std::cout << "flag1 || flag2 = " << (flag1 || flag2) << std::endl;  // 或:1
    std::cout << "!flag1 = " << (!flag1) << std::endl;                  // 非:0

    // ========== 位运算符 ==========
    unsigned char m = 0b1100;   // 12
    unsigned char n = 0b1010;   // 10
    std::cout << "m & n = " << (m & n) << std::endl;   // 按位与:8
    std::cout << "m | n = " << (m | n) << std::endl;   // 按位或:14
    std::cout << "m ^ n = " << (m ^ n) << std::endl;   // 按位异或:6
    std::cout << "~m = " << (~m) << std::endl;         // 按位取反
    std::cout << "m << 1 = " << (m << 1) << std::endl; // 左移:24
    std::cout << "m >> 1 = " << (m >> 1) << std::endl; // 右移:6

    // ========== 赋值运算符 ==========
    int c = 10;
    c += 5;   // c = c + 5
    c -= 3;   // c = c - 3
    c *= 2;   // c = c * 2
    c /= 4;   // c = c / 4

    // ========== 三元运算符 ==========
    int max = (a > b) ? a : b;  // 如果a>b取a,否则取b

    // ========== 类型转换 ==========
    // 隐式转换
    double d = 10;           // int转double

    // 显式转换(C风格)
    int i = (int)3.14;

    // C++风格转换
    int j = static_cast<int>(3.14);

    return 0;
}

3.5 输入输出

#include <iostream>
#include <iomanip>  // 格式化输出

int main() {
    // ========== 基本输入输出 ==========
    int age;
    std::string name;

    std::cout << "请输入姓名和年龄:";
    std::cin >> name >> age;

    std::cout << "姓名:" << name << ",年龄:" << age << std::endl;

    // ========== 格式化输出 ==========
    double pi = 3.14159265358979;

    // 设置精度
    std::cout << std::fixed << std::setprecision(2) << pi << std::endl;  // 3.14
    std::cout << std::setprecision(10) << pi << std::endl;               // 3.1415926536

    // 设置宽度
    std::cout << std::setw(10) << "姓名" << std::setw(10) << "年龄" << std::endl;
    std::cout << std::setw(10) << "张三" << std::setw(10) << 25 << std::endl;

    // 十六进制输出
    std::cout << std::hex << 255 << std::endl;  // ff
    std::cout << std::dec << 255 << std::endl;  // 255

    // ========== 读取整行 ==========
    std::string line;
    std::cout << "请输入一行文本:";
    std::cin.ignore();  // 清除缓冲区
    std::getline(std::cin, line);
    std::cout << "你输入了:" << line << std::endl;

    return 0;
}

四、控制流

4.1 条件语句

#include <iostream>

int main() {
    int score = 85;

    // ========== if-else if-else ==========
    if (score >= 90) {
        std::cout << "优秀" << std::endl;
    } else if (score >= 60) {
        std::cout << "及格" << std::endl;
    } else {
        std::cout << "不及格" << std::endl;
    }

    // ========== switch语句 ==========
    int day = 3;
    switch (day) {
        case 1:
            std::cout << "星期一" << std::endl;
            break;
        case 2:
            std::cout << "星期二" << std::endl;
            break;
        case 3:
            std::cout << "星期三" << std::endl;
            break;
        case 4:
        case 5:
            std::cout << "工作日" << std::endl;
            break;
        default:
            std::cout << "周末" << std::endl;
            break;
    }

    // ========== C++17 if初始化语句 ==========
    if (int value = 100; value > 50) {
        std::cout << "value大于50" << std::endl;
    }

    // ========== 嵌套条件 ==========
    int age = 20;
    bool hasTicket = true;

    if (age >= 18) {
        if (hasTicket) {
            std::cout << "可以入场" << std::endl;
        } else {
            std::cout << "请购票" << std::endl;
        }
    } else {
        std::cout << "未成年人禁止入场" << std::endl;
    }

    return 0;
}

4.2 循环语句

#include <iostream>

int main() {
    // ========== for循环 ==========
    std::cout << "for循环:";
    for (int i = 1; i <= 5; i++) {
        std::cout << i << " ";
    }
    std::cout << std::endl;

    // ========== 基于范围的for循环(C++11) ==========
    int arr[] = {1, 2, 3, 4, 5};
    std::cout << "范围for循环:";
    for (int x : arr) {
        std::cout << x << " ";
    }
    std::cout << std::endl;

    // 使用引用修改元素
    for (int& x : arr) {
        x *= 2;
    }

    // ========== while循环 ==========
    int count = 0;
    std::cout << "while循环:";
    while (count < 5) {
        std::cout << count << " ";
        count++;
    }
    std::cout << std::endl;

    // ========== do-while循环 ==========
    int n = 0;
    std::cout << "do-while循环:";
    do {
        std::cout << n << " ";
        n++;
    } while (n < 3);
    std::cout << std::endl;

    // ========== 嵌套循环:乘法表 ==========
    std::cout << "乘法表:" << std::endl;
    for (int i = 1; i <= 9; i++) {
        for (int j = 1; j <= i; j++) {
            std::cout << j << "×" << i << "=" << (i * j) << "\t";
        }
        std::cout << std::endl;
    }

    // ========== break和continue ==========
    std::cout << "break和continue示例:";
    for (int i = 1; i <= 10; i++) {
        if (i == 5) {
            continue;  // 跳过5
        }
        if (i == 8) {
            break;     // 到达8退出循环
        }
        std::cout << i << " ";
    }
    std::cout << std::endl;

    return 0;
}

来源:
https://app-a87ujc988w01.appmiaoda.com/

相关文章
|
21天前
|
算法 C++ 容器
C++入门知识大全(二)
教程来源 https://app-aakcgtuh1ywx.appmiaoda.com 本教程系统讲解C++核心知识:涵盖数组/字符串操作、函数重载与lambda、类与继承、STL容器算法、智能指针内存管理,以及C++11/14/17/20现代特性,并通过学生管理系统实战巩固所学,助力初学者扎实掌握面向对象编程与标准库应用。
|
17天前
|
前端开发 开发者
HTML学习知识点大全(一)
教程来源 https://app-abdss1rim1oh.appmiaoda.com HTML是构建网页的基石标记语言,非编程语言,通过标签定义结构与语义。本文系统梳理从基础语法、文档结构、meta/link/script头部标签,到文本格式、标题段落、双向文本等核心知识,兼顾新手入门与开发者进阶参考。
|
21天前
|
设计模式 安全 编译器
C++高阶开发大全:系统级编程(一)
教程来源 https://app-ad5sxofh8phd.appmiaoda.com 本文系统梳理C++高阶开发核心体系:深入模板元编程、类型萃取与SFINAE、表达式模板、CRTP;详解内存模型、无锁并发、原子操作与内存屏障;剖析编译器对象模型、虚函数表、RTTI及异常机制。助你突破瓶颈,进阶系统级专家。
|
人工智能 算法 C语言
C/C++中的素数判定
素数又称质数。如何有效判断素数?暴力试除、筛法。埃氏筛、欧拉筛,动图演示、代码实例。
571 1
C/C++中的素数判定
|
21天前
|
Linux API 网络安全
OpenClaw+魔塔Ollama私有化部署、阿里云部署与无限量本地模型+千问API与免费Coding Plan接入实战指南
OpenClaw作为轻量化AI Agent框架,在自动化任务、文件处理、代码生成、信息检索等场景中效率突出,但商用API高额Token消耗、网络限制与数据隐私问题,长期制约个人与团队规模化使用。通过魔塔ModelScope国内源加速部署Ollama,搭配支持工具调用的千问3.5系列本地模型,可实现OpenClaw完全离线运行、无限量调用、数据不出内网,彻底告别Token焦虑。本文基于2026年最新实践,完整覆盖Windows11/MacOS/Linux本地部署、阿里云云端部署、魔塔Ollama安装优化、局域网开放、OpenClaw配置对接、阿里云千问API与免费Coding Plan接入,提供
2003 0
|
1月前
|
人工智能
聊聊 AI 的 token 到底是啥?
Token是AI处理文字的最小单位(如“今天”“天气”),非单字而是“词块”。它决定对话长度、计费成本与响应速度:中文约1.5字/个,英文约0.75词/个。精简表达=更便宜、更快、不超限。(239字)
14786 4
|
Serverless 区块链 数据安全/隐私保护
蚂蚁区块链
蚂蚁区块链
2704 0
|
30天前
|
人工智能 JavaScript Linux
OpenClaw到底是什么?OpenClaw全平台部署(阿里云/本地)+免费大模型API配置+三大场景实战+FAQ
“ChatGPT负责想,OpenClaw负责做”——这是2026年AI领域最直白的能力划分。当传统AI还停留在“提供灵感、生成文本”的层面,OpenClaw早已凭借“带手带脚”的执行能力,成为无数人的“全自动员工”“创作流水线”与“私人管家”。它不只是聊天工具,更是能直接接管电脑、完成完整任务的生产力枢纽——自动整理文件、提取数据、生成报表、剪辑视频、管理生活琐事,真正实现“你动口,AI动手”。
682 2
|
5月前
|
人工智能 机器人 定位技术
隔壁火锅店天天排队,老板悄悄做了这件事?
成都火锅店两周营业额提升38%?秘诀是GEO优化!AI搜索时代,让店铺被推荐成“附近首选”。从信息标记到场景内容布局,三步打造AI推荐门店。别再等顾客找你,让AI把客流送到门口。
354 0

热门文章

最新文章

下一篇
开通oss服务