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/

相关文章
|
5月前
|
算法 C++ 容器
C++入门知识大全(二)
教程来源 https://app-aakcgtuh1ywx.appmiaoda.com 本教程系统讲解C++核心知识:涵盖数组/字符串操作、函数重载与lambda、类与继承、STL容器算法、智能指针内存管理,以及C++11/14/17/20现代特性,并通过学生管理系统实战巩固所学,助力初学者扎实掌握面向对象编程与标准库应用。
|
7月前
|
Linux 虚拟化 iOS开发
UTM 4.7.5 发布 - 在 macOS 上优雅的使用 QEMU 虚拟化 Windows、Linux 和 macOS
UTM 4.7.5 发布 - 在 macOS 上优雅的使用 QEMU 虚拟化 Windows、Linux 和 macOS
1162 0
UTM 4.7.5 发布 - 在 macOS 上优雅的使用 QEMU 虚拟化 Windows、Linux 和 macOS
|
5月前
|
算法 Java C语言
重新认识 C++:不止是 “难学的编程语言”,更是编程底层思维的基石
提到C++,很多编程新手的第一印象是“难、复杂、偏底层”,甚至会直接将其归为“劝退级”语言。但事实上,C++的“难”,本质是对编程底层逻辑的深度还原——它不似Python、Java那样封装了大量细节,而是让你直面内存、数据、执行流程的本质。
701 3
|
5月前
|
设计模式 安全 编译器
C++高阶开发大全:系统级编程(一)
教程来源 https://app-ad5sxofh8phd.appmiaoda.com 本文系统梳理C++高阶开发核心体系:深入模板元编程、类型萃取与SFINAE、表达式模板、CRTP;详解内存模型、无锁并发、原子操作与内存屏障;剖析编译器对象模型、虚函数表、RTTI及异常机制。助你突破瓶颈,进阶系统级专家。
|
SQL 分布式计算 API
轻松驾驭Hive数仓,数据分析从未如此简单!
轻松驾驭Hive数仓,数据分析从未如此简单!
796 1
|
缓存 JSON 安全
深入了解 Elasticsearch:10个常见面试问题及详细答案
Elasticsearch 是一个强大的搜索和分析引擎,广泛应用于处理大型数据集和构建实时搜索应用程序。在准备 Elasticsearch 面试时,掌握一些常见问题的答案至关重要。本文将为你提供10个常见的 Elasticsearch 面试问题,并详细解答每个问题。
|
传感器 存储 监控
基于Arduino的线性循迹小车
基于Arduino的线性循迹小车
764 0
|
计算机视觉 Python
ERROR: Could not build wheels for opencv-python which use PEP 517 and cannot be installed directly
ERROR: Could not build wheels for opencv-python which use PEP 517 and cannot be installed directly
845 2
|
网络协议 Ubuntu Linux
在Linux中, 如何配置网络接口?
在Linux中, 如何配置网络接口?

热门文章

最新文章