目录
类域
命名空间域
局部域
全局域
第一个关键字
命名冲突
同一个项目之间冲突
? 预作用限定符::
命名空间
缺省参数
指在同一个项目中出现了命名冲突的情况。为了避免命名冲突,可以使用预作用限定符(::)进行限定。
是一种组织代码的机制,用于避免不同模块或库之间的命名冲突。命名空间可以将代码进行逻辑上的分组,并提供了一种层次化的命名结构。
指在函数或方法定义时给参数设置默认值,使得在调用时可以不传递该参数的值。这样做可以增加函数的灵活性和可重用性。
函数重载是指在同一个作用域内定义多个相同名称但参数列表不同的函数。通过函数重载,可以根据传入的参数类型或数量的不同来调用不同的函数。
需要注意的是,在进行函数重载时,编译器会根据调用时的参数类型或数量匹配最合适的函数进行调用。如果存在多个函数都能匹配到调用条件,编译器会选择最精确匹配的函数进行调用。如果出现无法唯一确定调用的情况,编译器会报错。因此,在进行函数重载时,需要保证函数之间的参数列表能够明确区分。
下面是一个使用函数重载的示例代码
#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() {
int x = 1, y = 2, z = 3;
double u = 1.5, v = 2.5;
cout << add(x, y) << endl; // 调用add(int, int)函数
cout << add(u, v) << endl; // 调用add(double, double)函数
cout << add(x, y, z) << endl; // 调用add(int, int, int)函数
return 0;
}
在这个例子中,我们定义了三个同名但参数列表不同的add函数,分别接受两个整型参数、两个浮点型参数和三个整型参数。在main函数中,我们分别调用了这三个函数,并根据传入的参数类型来选择调用哪个函数。由于函数重载的存在,编译器可以根据传入的参数类型自动选择最适合的函数进行调用。
&取地址
在编程中,引用是指通过使用已有变量的别名来访问该变量的值或者修改它。引用提供了一种方便的方式来操作变量,而无需直接访问内存地址。
需要注意的是,引用和指针不同。引用在定义时必须初始化,并且不能改变引用的目标,而指针可以在任意时刻指向不同的对象。引用也没有空值(null)的概念,而指针可以为空。
在C++中,使用&符号来声明引用,例如:
int a = 42;
int& ref = a; // ref是a的引用
在函数参数传递中,可以使用引用参数来实现对原变量的修改,例如:
void increment(int& num) {
num++;
}
int main() {
int a = 5;
increment(a); // 通过引用修改a的值
cout << a; // 输出6
return 0;
}
?
都是用于间接访问变量的工具,它们在C++中有着不同的特点和用法。
在选择使用引用还是指针时,可以根据具体的需求和场景来决定:
下面是一个使用引用和指针的示例代码,以展示它们的不同特点:
#include <iostream>
using namespace std;
void increment(int& num) {
num++; // 直接操作num所指向的变量
}
void allocate(int*& ptr, int size) {
ptr = new int[size]; // 动态分配内存,并将ptr指向该内存块
}
int main() {
int a = 5;
int* p = &a; // 使用指针来访问变量a
int& r = a; // 使用引用来访问变量a
increment(a); // 通过引用修改a的值
cout << a << endl; // 输出6
int* q = nullptr;
allocate(q, 10); // 动态分配内存,并将q指向该内存块
q[0] = 42; // 使用指针操作动态分配的内存
delete[] q; // 释放动态分配的内存
return 0;
}
在这个例子中,我们定义了一个increment函数,它使用引用参数来修改传入的变量的值。我们还定义了一个allocate函数,它使用指针参数来动态分配内存,并将指针指向该内存块。在main函数中,我们使用引用r和指针p来访问变量a,然后调用increment函数来修改a的值。我们还使用指针q来动态分配内存,并使用q来访问和操作动态分配的内存。最后,我们释放了动态分配的内存。