C++学习 day1

发布于 2026-06-26  22 次阅读


C++ 学习笔记

Day 1:认识 C++ 与基础语法

今天目标:了解 C++ 的基本特点,掌握第一个 C++ 程序、命名空间、bool、引用和函数重载。


1、C++ 基础认识

1.1、C++ 简介

C++ 是在 C 语言基础上发展出来的编程语言,最初叫 C with Classes,后来正式命名为 C++

C++ 兼容大部分 C 语言语法,同时增加了面向对象、泛型编程、标准库等能力。

常见应用领域:

  • 系统软件
  • 嵌入式开发
  • 后端服务
  • 游戏开发
  • 图形界面
  • 科学计算

常见标准:

C++98 / C++03
C++11
C++14
C++17
C++20
C++23
C++26

如果代码使用了 C++11 及以上的新特性,编译时可能需要指定标准:

g++ main.cpp -std=c++11

2、第一个 C++ 程序

#include <iostream>

int main()
{
    std::cout << "hello cpp world" << std::endl;
    return 0;
}

核心解释

#include <iostream>

引入 C++ 标准输入输出库。

std::cout

标准输出流,用来向屏幕输出内容,类似 C 语言中的 printf

std::endl

表示换行,类似 n

::

作用域运算符,用于访问指定作用域中的名字。

常见标准 IO 对象:

std::cin    标准输入流
std::cout   标准输出流
std::cerr   标准错误流

常见输入输出运算符:

<<   输出运算符,配合 cout / cerr 使用
>>   输入运算符,配合 cin 使用

3、using 和 namespace

namespace 称为命名空间,作用是把变量、函数、类等名字放到指定范围中,避免名字冲突。

namespace A
{
    int value = 10;
}

namespace B
{
    int value = 20;
}

虽然 AB 中都有 value,但它们属于不同命名空间,所以不会冲突。

访问命名空间中的内容,需要使用 ::

std::cout << A::value << std::endl;
std::cout << B::value << std::endl;

std 是 C++ 标准库所在的命名空间,例如:

std::cin
std::cout
std::endl

using 可以简化命名空间的使用:

using namespace std;

写了之后:

cout << "hello cpp world" << endl;

就不需要每次都写 std::

但正式项目中不建议随便使用 using namespace std;,因为可能造成名字冲突。更推荐写:

std::cout
std::cin
std::endl

或者只引入需要的名字:

using std::cout;
using std::endl;

小结

namespace:创建命名空间,防止名字冲突
::       :访问指定作用域中的名字
using    :简化命名空间的使用
std      :C++ 标准库所在的命名空间

4、布尔类型 bool

bool 是 C++ 的布尔类型,用来表示

它只有两个值:

true    // 真
false   // 假

示例:

#include <iostream>

int main()
{
    bool flag = true;

    std::cout << flag << std::endl;

    return 0;
}

输出:

1

在 C++ 中:

true  默认输出为 1
false 默认输出为 0

小结

bool  :布尔类型
true  :真
false :假
常用于条件判断、状态标志、函数返回结果

5、引用

引用本质上是给已有变量起一个别名

int a = 10;
int& ref = a;

其中:

int& ref

表示 refa 的引用,也就是 a 的别名。

修改引用,就等于修改原变量:

int a = 10;
int& ref = a;

ref = 20;

std::cout << a << std::endl;  // 输出 20

5.1、引用的特点

引用必须初始化:

int& ref;  // 错误

正确写法:

int a = 10;
int& ref = a;

引用一旦绑定,不能再改绑:

int a = 10;
int b = 20;

int& ref = a;
ref = b;

这里 ref = b; 不是让 ref 改成引用 b,而是把 b 的值赋给 a


5.2、引用作为函数参数

引用常用于函数参数,可以让函数直接修改外部变量。

#include <iostream>

void change(int& x)
{
    x = 100;  // 修改 x,其实就是修改外部变量
}

int main()
{
    int a = 10;

    change(a);

    std::cout << a << std::endl;  // 输出 100

    return 0;
}

5.3、const 引用

如果函数只需要读取数据,不希望修改数据,可以使用 const 引用。

void print(const int& x)
{
    std::cout << x << std::endl;
}

const int& x 表示:

x 是引用,但不能通过 x 修改原变量

const 引用的作用:

1. 避免拷贝,提高效率
2. 防止函数内部误修改数据
3. 可以接收临时值

常见写法:

void show(const std::string& name);

小结

引用就是变量的别名
引用必须初始化
引用绑定后不能改绑
修改引用就是修改原变量
只读参数常用 const 引用

6、函数重载

函数重载指的是:在同一个作用域中,可以定义多个函数名相同,但参数列表不同的函数。

简单理解:

函数名可以相同,但参数必须不同。

示例:

#include <iostream>
using namespace std;

int add(int a, int b)
{
    return a + b;
}

double add(double a, double b)
{
    return a + b;
}

int add(int a, int b, int c)
{
    return a + b + c;
}

int main()
{
    cout << add(10, 20) << endl;      // 调用 int add(int, int)
    cout << add(1.5, 2.5) << endl;    // 调用 double add(double, double)
    cout << add(1, 2, 3) << endl;     // 调用 int add(int, int, int)

    return 0;
}

编译器会根据实参的类型和个数,自动选择对应函数。

6.1、构成函数重载的条件

函数名相同,参数列表不同。

参数列表不同包括:

void func(int a);              // 参数类型不同
void func(double a);

void func(int a);              // 参数个数不同
void func(int a, int b);

void func(int a, double b);    // 参数顺序不同
void func(double a, int b);

6.2、不能只靠返回值重载

错误示例:

int func(int a)
{
    return a;
}

double func(int a)
{
    return a;
}

原因是调用时:

func(10);

编译器只能根据参数判断调用哪个函数,不能只根据返回值判断。

6.3、注意事项

函数重载时,要避免写出容易产生歧义的函数。

例如:

void func(int a);
void func(int& a);

当调用:

int x = 10;
func(x);

编译器可能不知道该调用哪一个。

小结

函数重载核心:
1. 函数名相同
2. 参数列表不同
3. 返回值不同不能构成重载
4. 编译器根据实参自动匹配函数

函数重载可以理解为:

同一个函数名,根据不同参数,执行不同版本。

"When faced with uncertainty, ask the spring breeze."