从零开始学C++核心语法:从基础到面向对象

从零开始学C++核心语法:从基础到面向对象

C++ 是一门融合了「过程式编程」和「面向对象编程」的静态编译型语言,兼具高效性和灵活性。本文将从新手视角,系统讲解 C++ 核心语法,包括库导入、命名空间、函数、条件判断、循环、类与对象等核心知识点,每个知识点配套可运行的代码示例,帮你快速掌握基础用法。

一、C++ 程序的基本结构

先看一个最简单的 C++ 程序,建立整体认知:

cpp 复制代码
// 1. 导入库(头文件包含)
#include <iostream>

// 2. 命名空间使用(简化标准库调用)
using namespace std;

// 3. 函数定义(程序入口函数,必须有)
int main() {
    // 4. 输出语句(标准库功能)
    cout << "Hello, C++!" << endl;
    // 5. 返回值(0 表示程序正常结束)
    return 0;
}

运行结果:Hello, C++!

核心组成:

  • 注释:// 单行注释/* 多行注释 */,用于代码说明,编译时会被忽略;
  • 头文件导入:#include 引入外部库/自定义代码;
  • 命名空间:解决命名冲突,简化代码调用;
  • 函数:程序的基本执行单元,main 是程序入口;
  • 语句:以分号 ; 结尾,是最小执行单元。

二、导入库(头文件包含)

C++ 没有「导入」的概念,而是通过 #include 实现「文件包含」------ 将指定头文件的内容原封不动拷贝到当前文件中,解决「编译器找不到代码」的问题。

1. 两种包含方式

语法 用途 示例
#include <xxx> 包含系统标准库头文件 #include <iostream>(输入输出)、#include <string>(字符串)、#include <vector>(动态数组)
#include "xxx" 包含自定义头文件(本地文件) #include "Book.h"(自定义图书类头文件)

2. 常用标准库头文件

头文件 核心功能
<iostream> 控制台输入(cin)、输出(cout)
<string> 字符串类型(std::string)操作
<vector> 动态数组(std::vector)
<cmath> 数学函数(sqrt、pow 等)
<cstdio> C 风格输入输出(printf/scanf)

示例:使用多个标准库

cpp 复制代码
#include <iostream>   // 输入输出
#include <string>     // 字符串
#include <cmath>      // 数学函数

using namespace std;

int main() {
    string name = "C++";
    double num = 16;
    cout << "Hello, " << name << "!" << endl;
    cout << "16的平方根:" << sqrt(num) << endl; // 调用cmath的sqrt函数
    return 0;
}

运行结果:

复制代码
Hello, C++!
16的平方根:4

三、命名空间(namespace)

命名空间是 C++ 解决「命名冲突」的核心机制------给变量、函数、类加「前缀」,区分不同模块的同名元素,类比 Python 的「模块名」。

1. 核心概念

  • 定义:用 namespace 命名空间名 { ... } 包裹代码,将内容归属到该命名空间;
  • 访问:用 命名空间名::元素名 访问,或用 using 简化调用;
  • 标准库命名空间:C++ 所有标准库内容(cout、string、vector 等)都在 std 命名空间中。

2. 命名空间的三种使用方式

方式1:完整限定(最安全,无冲突)
cpp 复制代码
#include <iostream>

// 不使用using,直接用std::限定
int main() {
    std::cout << "完整限定调用标准库" << std::endl;
    return 0;
}
方式2:引入单个元素(折中,简洁且安全)
cpp 复制代码
#include <iostream>

// 只引入std::cout,其他仍需限定
using std::cout;
using std::endl;

int main() {
    cout << "只引入单个元素" << endl;
    return 0;
}
方式3:引入整个命名空间(简洁,可能冲突)
cpp 复制代码
#include <iostream>

// 引入std所有内容,可直接用cout/endl
using namespace std;

int main() {
    cout << "引入整个命名空间" << endl;
    return 0;
}

3. 自定义命名空间

cpp 复制代码
#include <iostream>

// 自定义命名空间(图书模块)
namespace Library {
    // 命名空间内的函数
    void printBook() {
        std::cout << "图书模块:C++ Primer" << std::endl;
    }

    // 命名空间内的类
    class Book {
    public:
        std::string name = "Python编程";
    };
}

int main() {
    // 访问自定义命名空间的函数
    Library::printBook();
    // 访问自定义命名空间的类
    Library::Book book;
    std::cout << "书名:" << book.name << std::endl;
    return 0;
}

运行结果:

复制代码
图书模块:C++ Primer
书名:Python编程

关键注意事项

  • 不要在头文件中写 using namespace std;:会污染全局命名空间,导致其他文件命名冲突;
  • 命名空间可嵌套:namespace A { namespace B { ... } },访问时用 A::B::元素
  • 同名命名空间会自动合并:分散在不同文件的同名命名空间,编译时会合并为一个。

四、函数定义与使用

函数是封装可复用逻辑的基本单元,C++ 函数必须明确「返回值类型」和「参数类型」,比 Python 更严谨。

1. 函数的基本语法

cpp 复制代码
// 函数声明(可选,若定义在调用前可省略)
返回值类型 函数名(参数类型1 参数名1, 参数类型2 参数名2);

// 函数定义(必须有,包含具体逻辑)
返回值类型 函数名(参数类型1 参数名1, 参数类型2 参数名2) {
    // 函数体(执行逻辑)
    return 返回值; // 无返回值(void)则省略return
}

2. 核心规则

  • 返回值类型:可以是 intdoublestring 等,无返回值用 void
  • 参数:必须指定类型,多个参数用逗号分隔;
  • 函数调用:函数名(参数值),参数数量/类型必须匹配。

3. 示例:不同类型的函数

cpp 复制代码
#include <iostream>
#include <string>
using namespace std;

// 1. 无参数、无返回值函数
void printHello() {
    cout << "Hello, 函数!" << endl;
}

// 2. 有参数、有返回值函数(加法)
int add(int a, int b) {
    return a + b;
}

// 3. 字符串参数函数
string getBookInfo(string name, string author) {
    return "书名:" + name + ",作者:" + author;
}

int main() {
    // 调用无参数函数
    printHello();
    // 调用有参数函数,接收返回值
    int sum = add(3, 5);
    cout << "3+5=" << sum << endl;
    // 调用字符串参数函数
    string info = getBookInfo("C++ Primer", "Stanley Lippman");
    cout << info << endl;
    return 0;
}

运行结果:

复制代码
Hello, 函数!
3+5=8
书名:C++ Primer,作者:Stanley Lippman

4. 函数重载(C++ 独有)

允许定义同名函数,只要「参数数量/类型/顺序」不同,编译器会自动匹配:

cpp 复制代码
#include <iostream>
using namespace std;

// 重载1:两个int相加
int add(int a, int b) {
    return a + b;
}

// 重载2:三个int相加
int add(int a, int b, int c) {
    return a + b + c;
}

// 重载3:两个double相加
double add(double a, double b) {
    return a + b;
}

int main() {
    cout << add(1, 2) << endl;      // 调用重载1:3
    cout << add(1, 2, 3) << endl;   // 调用重载2:6
    cout << add(1.5, 2.5) << endl;  // 调用重载3:4
    return 0;
}

五、条件判断(if-else / if-else if-else)

C++ 条件判断用于根据不同条件执行不同逻辑,语法和 Python 类似,但需注意「花括号」和「分号」的使用。

1. 基本语法

cpp 复制代码
// 单条件
if (条件表达式) {
    // 条件为true时执行
}

// 双条件
if (条件表达式) {
    // 条件为true时执行
} else {
    // 条件为false时执行
}

// 多条件
if (条件1) {
    // 条件1为true时执行
} else if (条件2) {
    // 条件2为true时执行
} else {
    // 所有条件为false时执行
}

2. 核心规则

  • 条件表达式:必须返回布尔值(true/false),或可隐式转换为布尔值(如 0=false,非0=true);
  • 花括号 {}:若只有一行语句可省略,建议始终添加(避免逻辑错误);
  • 分号 ;:仅用于表达式语句结尾,if/else 后不加(否则会导致逻辑失效)。

示例:图书借阅判断

cpp 复制代码
#include <iostream>
#include <string>
using namespace std;

int main() {
    // 模拟图书是否借出
    bool isBorrowed = true;
    string bookName = "C++ Primer";

    // 单条件判断
    if (isBorrowed) {
        cout << bookName << " 已借出,无法借阅!" << endl;
    }

    // 双条件判断
    isBorrowed = false;
    if (isBorrowed) {
        cout << bookName << " 已借出" << endl;
    } else {
        cout << bookName << " 可借阅" << endl;
    }

    // 多条件判断(图书评分)
    int score = 95;
    if (score >= 90) {
        cout << bookName << " 评分:优秀" << endl;
    } else if (score >= 80) {
        cout << bookName << " 评分:良好" << endl;
    } else {
        cout << bookName << " 评分:一般" << endl;
    }

    return 0;
}

运行结果:

复制代码
C++ Primer 已借出,无法借阅!
C++ Primer 可借阅
C++ Primer 评分:优秀

六、循环(while / for)

循环用于重复执行一段逻辑,C++ 支持 whiledo-whilefor 三种循环,核心是「循环条件」和「终止逻辑」。

1. while 循环

「先判断,后执行」,适合循环次数不确定的场景。

cpp 复制代码
// 语法
while (循环条件) {
    // 循环体
    // 必须有终止条件(如i++),否则死循环
}

示例:打印 1~5 的数字

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    int i = 1;
    // 循环条件:i <= 5
    while (i <= 5) {
        cout << "i = " << i << endl;
        i++; // 终止条件:i递增,最终超过5
    }
    return 0;
}

运行结果:

复制代码
i = 1
i = 2
i = 3
i = 4
i = 5

2. do-while 循环

「先执行,后判断」,至少执行一次循环体。

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    int i = 6;
    do {
        cout << "i = " << i << endl;
        i++;
    } while (i <= 5); // 条件为false,但仍执行一次
    return 0;
}

运行结果:i = 6

3. for 循环

「初始化 + 条件 + 递增」,适合循环次数确定的场景,语法更简洁。

cpp 复制代码
// 语法
for (初始化表达式; 循环条件; 递增/递减表达式) {
    // 循环体
}

示例:遍历图书列表

cpp 复制代码
#include <iostream>
#include <string>
using namespace std;

int main() {
    // 图书列表(数组)
    string books[] = {"C++ Primer", "Python编程", "数据结构与算法"};
    // 数组长度:总字节数 / 单个元素字节数
    int len = sizeof(books) / sizeof(books[0]);

    // for循环遍历
    for (int i = 0; i < len; i++) {
        cout << "第" << i+1 << "本书:" << books[i] << endl;
    }
    return 0;
}

运行结果:

复制代码
第1本书:C++ Primer
第2本书:Python编程
第3本书:数据结构与算法

4. 循环控制关键字

  • break:立即终止整个循环;
  • continue:跳过当前循环,进入下一次循环。

示例:

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    // break:打印1~3后终止
    for (int i = 1; i <= 5; i++) {
        if (i > 3) {
            break;
        }
        cout << "break示例:i = " << i << endl;
    }

    // continue:跳过偶数,只打印奇数
    for (int i = 1; i <= 5; i++) {
        if (i % 2 == 0) {
            continue;
        }
        cout << "continue示例:i = " << i << endl;
    }
    return 0;
}

运行结果:

复制代码
break示例:i = 1
break示例:i = 2
break示例:i = 3
continue示例:i = 1
continue示例:i = 3
continue示例:i = 5

七、类的定义与使用(面向对象核心)

C++ 是面向对象语言,类(class)是封装「属性(变量)」和「行为(函数)」的核心载体,类比 Python 的类,但语法更严谨。

1. 类的基本结构

cpp 复制代码
// 类的定义(通常写在头文件,如Book.h)
class 类名 {
    // 访问控制符:private(默认)/ public / protected
private:
    // 私有属性/函数:仅类内部可访问
    类型 属性名;

public:
    // 公有属性/函数:类外部可访问
    // 构造函数(初始化对象,与类名同名,无返回值)
    类名(参数列表) {
        // 初始化属性
    }

    // 成员函数(类的行为)
    返回值类型 函数名(参数列表) {
        // 函数逻辑
    }
};

2. 类的使用步骤

  1. 定义类(声明属性和函数);
  2. 实现类的成员函数(若头文件和源文件分离);
  3. 实例化对象(创建类的实例);
  4. 调用对象的属性/函数。

3. 完整示例:图书类

步骤1:定义类(Book.h)
cpp 复制代码
#ifndef BOOK_H   // 头文件保护,避免重复包含
#define BOOK_H

#include <string>
// 自定义命名空间
namespace Library {
    class Book {
    private:
        // 私有属性:仅类内部可访问
        std::string name;    // 书名
        std::string author;  // 作者
        bool isBorrowed;     // 是否借出

    public:
        // 构造函数(初始化对象)
        Book(std::string name, std::string author);

        // 成员函数:借阅图书
        bool borrowBook();

        // 成员函数:归还图书
        bool returnBook();

        // 成员函数:打印图书信息
        void showInfo();
    };
}

#endif // BOOK_H
步骤2:实现类的成员函数(Book.cpp)
cpp 复制代码
#include "Book.h"
#include <iostream>

namespace Library {
    // 构造函数实现
    Book::Book(std::string name, std::string author) {
        this->name = name;       // this指针:区分参数和成员变量
        this->author = author;
        this->isBorrowed = false; // 默认未借出
    }

    // 借阅函数实现
    bool Book::borrowBook() {
        if (isBorrowed) {
            return false; // 已借出,失败
        }
        isBorrowed = true;
        return true;
    }

    // 归还函数实现
    bool Book::returnBook() {
        if (!isBorrowed) {
            return false; // 未借出,失败
        }
        isBorrowed = false;
        return true;
    }

    // 打印信息实现
    void Book::showInfo() {
        std::cout << "书名:" << name << std::endl;
        std::cout << "作者:" << author << std::endl;
        std::cout << "状态:" << (isBorrowed ? "已借出" : "未借出") << std::endl;
    }
}
步骤3:使用类(main.cpp)
cpp 复制代码
#include "Book.h"
#include <iostream>

// 引入自定义命名空间的类
using Library::Book;

int main() {
    // 实例化对象(创建图书)
    Book book1("C++ Primer", "Stanley Lippman");
    Book book2("Python编程", "Eric Matthes");

    // 调用成员函数:打印信息
    std::cout << "===== 图书1信息 =====" << std::endl;
    book1.showInfo();

    // 调用成员函数:借阅图书
    bool borrowOk = book1.borrowBook();
    if (borrowOk) {
        std::cout << "\n图书1借阅成功!" << std::endl;
    } else {
        std::cout << "\n图书1借阅失败!" << std::endl;
    }

    // 再次借阅(失败)
    borrowOk = book1.borrowBook();
    if (!borrowOk) {
        std::cout << "图书1重复借阅失败!" << std::endl;
    }

    // 归还图书
    bool returnOk = book1.returnBook();
    if (returnOk) {
        std::cout << "图书1归还成功!" << std::endl;
    }

    // 打印归还后的信息
    std::cout << "\n===== 图书1归还后信息 =====" << std::endl;
    book1.showInfo();

    return 0;
}
编译运行(Linux)
bash 复制代码
# 编译:链接所有源文件
g++ main.cpp Book.cpp -o book_demo
# 运行
./book_demo
运行结果
复制代码
===== 图书1信息 =====
书名:C++ Primer
作者:Stanley Lippman
状态:未借出

图书1借阅成功!
图书1重复借阅失败!
图书1归还成功!

===== 图书1归还后信息 =====
书名:C++ Primer
作者:Stanley Lippman
状态:未借出

4. 核心知识点

  • this 指针:隐式指向当前对象,用于区分参数和成员变量(如 this->name = name);
  • 访问控制:private 仅类内部访问,public 外部可访问;
  • 构造函数:与类名同名,无返回值,用于初始化对象;
  • 实例化:Book book1(...) 直接创建对象(栈实例),也可 Book* book1 = new Book(...)(堆实例)。

八、总结

本文覆盖了 C++ 新手必备的核心语法,关键知识点总结:

  1. 库导入#include <xxx> 包含系统库,#include "xxx" 包含自定义库,解决「找不到代码」的问题;
  2. 命名空间std 是标准库命名空间,using namespace std 简化调用,自定义命名空间解决命名冲突;
  3. 函数:必须指定返回值和参数类型,支持重载(同名不同参数);
  4. 条件判断if-else 按条件执行逻辑,{} 界定代码块,结尾不加 ;
  5. 循环while 适合次数不确定,for 适合次数确定,break/continue 控制循环;
  6. 类与对象 :封装属性和行为,private/public 控制访问,构造函数初始化对象,this 指针指向当前实例。

掌握这些语法后,可以尝试实现简单的小项目(如图书管理系统、计算器),通过实践巩固知识点。C++ 语法严谨,重点注意「分号」「花括号」「类型声明」的规范,避免常见的语法错误。

相关推荐
ZHOUPUYU10 小时前
PHP 8.3网关优化:我用JIT将QPS提升300%的真实踩坑录
开发语言·php
寻寻觅觅☆14 小时前
东华OJ-基础题-106-大整数相加(C++)
开发语言·c++·算法
fpcc14 小时前
并行编程实战——CUDA编程的Parallel Task类型
c++·cuda
偷吃的耗子15 小时前
【CNN算法理解】:三、AlexNet 训练模块(附代码)
深度学习·算法·cnn
l1t15 小时前
在wsl的python 3.14.3容器中使用databend包
开发语言·数据库·python·databend
赶路人儿15 小时前
Jsoniter(java版本)使用介绍
java·开发语言
化学在逃硬闯CS15 小时前
Leetcode1382. 将二叉搜索树变平衡
数据结构·算法
ceclar12316 小时前
C++使用format
开发语言·c++·算法
码说AI16 小时前
python快速绘制走势图对比曲线
开发语言·python
Gofarlic_OMS16 小时前
科学计算领域MATLAB许可证管理工具对比推荐
运维·开发语言·算法·matlab·自动化