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;
}
虽然 A 和 B 中都有 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
表示 ref 是 a 的引用,也就是 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. 编译器根据实参自动匹配函数
函数重载可以理解为:
同一个函数名,根据不同参数,执行不同版本。






Comments | NOTHING