1. 命名空间(Namespace)
什么是命名空间?
命名空间是C++中用来避免命名冲突的一种机制。它可以将全局作用域划分为不同的区域,每个区域都有自己的名称,从而防止不同库或模块中的同名标识符发生冲突。
基本语法与使用
cpp
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
namespace frf
{
int a;
char b;
}
int main()
{
printf("%d", frf::a); // 使用作用域解析运算符::访问命名空间成员
return 0;
}
命名空间的展开
cpp
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
// using namespace std; // 注释掉全局展开
namespace frf
{
int a;
char b;
}
using namespace frf; // 展开frf命名空间到当前作用域
int main()
{
printf("%d", a); // 展开后可以直接访问a,无需frf::前缀
return 0;
}
关键要点
- 作用域解析运算符(:😃:用于指定访问特定命名空间中的成员
- using声明:可以展开整个命名空间或特定成员
- 最佳实践 :避免在头文件中使用
using namespace,防止污染全局命名空间
2. 输入输出:cin和cout
C++使用流(stream)进行输入输出操作,cin用于输入,cout用于输出。

基本用法
cpp
#include <iostream>
using namespace std;
int main() {
int age;
string name;
cout << "请输入您的姓名:";
cin >> name;
cout << "请输入您的年龄:";
cin >> age;
cout << "您好," << name << "!您今年" << age << "岁。" << endl;
return 0;
}
特点
cout使用插入运算符<<输出数据cin使用提取运算符>>输入数据endl用于换行并刷新输出缓冲区- 相比C语言的
printf/scanf,C++的IO更加类型安全
3. 缺省参数(Default Parameters)
缺省参数允许函数在调用时省略某些参数,编译器会自动使用预设的默认值。
全缺省参数
cpp
void s(int a = 0, int b = 9, int c = 8) // 全缺省:所有参数都有默认值
{
cout << "a=" << a << endl;
cout << "b=" << b << endl;
cout << "c=" << c << endl;
}
半缺省参数
cpp
void s1(int a, int b = 4, int c = 7) // 半缺省:部分参数有默认值
{
cout << "a=" << a << endl;
cout << "b=" << b << endl;
cout << "c=" << c << endl;
}
int main()
{
// 全缺省函数调用示例
s(); // a=0, b=9, c=8
s(1); // a=1, b=9, c=8
s(1, 2); // a=1, b=2, c=8
s(1, 2, 3); // a=1, b=2, c=3
// 半缺省函数调用示例
s1(1, 2, 3); // a=1, b=2, c=3
s1(4); // a=4, b=4, c=7(使用默认值)
return 0;
}
使用规则
- 缺省参数必须从右向左连续提供
- 函数声明和定义中,缺省参数只能出现一次(通常在声明中)
- 缺省值必须是常量或全局变量
4. 函数重载(Function Overloading)
函数重载允许在同一作用域内定义多个同名函数,只要它们的参数列表不同即可。
三种重载情况
1. 参数类型不同
cpp
void fun(int a, int b)
{
cout << "调用int版本" << endl;
}
void fun(double a, double b)
{
cout << "调用double版本" << endl;
}
2. 参数个数不同
cpp
void fun(double a)
{
cout << "调用单参数版本" << endl;
}
void fun(double a, double b)
{
cout << "调用双参数版本" << endl;
}
3. 参数顺序不同
cpp
void fun(int a, double b)
{
cout << "调用int, double版本" << endl;
}
void fun(double b, int a)
{
cout << "调用double, int版本" << endl;
}
int main()
{
fun(1, 3.0); // 调用第一个版本
fun(3.0, 1); // 调用第二个版本
return 0;
}
重要限制:返回值不同不能作为重载条件,因为调用时无法区分要调用哪个版本。
5. 引用(Reference)
基本概念
引用是变量的别名,它为已存在的变量提供了另一个名称。
语法 :类型& 引用别名 = 引用对象

基本使用
cpp
int main()
{
// 引用,取别名&
int a = 0;
int& b = a; // b是a的别名
cout << "a的地址:" << &a << endl;
cout << "b的地址:" << &b << endl; // 地址相同
a = 10;
cout << "b的值:" << b << endl; // 输出10
b = 20;
cout << "a的值:" << a << endl; // 输出20
return 0;
}
连续取别名

cpp
int x = 5;
int& ref1 = x; // ref1是x的引用
int& ref2 = ref1; // ref2也是x的引用(通过ref1间接引用)
重要规则:引用必须初始化!!一旦初始化后,就不能再引用其他对象。
6. 指针和引用的关系
C++中指针和引用就像两个性格迥异的亲兄弟,指针是哥哥,引用是弟弟,在实践中他们相辅相成,功能有重叠性,但是各有自己的特点,互相不可替代。
主要区别
| 特性 | 引用 | 指针 |
|---|---|---|
| 语法概念 | 变量的别名,不开空间 | 存储变量地址,要开空间 |
| 初始化 | 必须初始化 | 建议初始化,但语法上不是必须 |
| 重新赋值 | 不能重新引用其他对象 | 可以改变指向的对象 |
| 访问方式 | 直接访问 | 需要解引用(*) |
| sizeof | 引用类型的大小 | 地址空间大小(32位4字节,64位8字节) |
| 安全性 | 相对更安全 | 容易出现空指针和野指针 |
实际应用场景
- 引用:函数参数传递、返回值、避免拷贝大对象
- 指针:动态内存分配、数组操作、实现多态
7. const引用
基本规则
记住:范围不能变大,只能缩小
代码示例
cpp
int main()
{
int b = 0;
// 正确:普通变量可以赋给const引用(范围缩小)
const int& a = b;
const int c = 9;
// 错误:const变量不能赋给非const引用(范围变大)
// int &d = c; // 编译错误
// 正确:const变量可以赋给const引用
const int& e = c;
return 0;
}
引用必须类型一致

cpp
int main()
{
int x = 10;
int& ref1 = x; // 正确:类型完全一致
// int& ref2 = 10; // 错误:不能绑定到字面值
const int& ref3 = 10; // 正确:const引用可以绑定到字面值
double y = 3.14;
// int& ref4 = y; // 错误:类型不匹配
const int& ref5 = y; // 正确:会发生隐式类型转换
}
总结
本文详细介绍了C++入门阶段的几个核心概念:
- 命名空间:解决命名冲突,组织代码结构
- 输入输出 :使用
cin/cout进行类型安全的IO操作 - 缺省参数:提高函数调用的灵活性
- 函数重载:根据参数不同调用同名函数
- 引用:变量的别名,提高效率
- 指针与引用:理解两者的区别与联系
- const引用:保证数据不被修改
掌握这些基础知识是深入学习C++的重要第一步。在实际编程中,要根据具体场景选择合适的技术,比如函数参数传递时优先使用const引用,需要动态内存管理时使用指针等。
建议读者通过实际编写代码来巩固这些概念,并尝试将它们组合使用,解决实际问题。C++的学习是一个循序渐进的过程,打好基础才能更好地理解后续的面向对象、模板、STL等高级特性。