一、域解析符
在同名局部变量作用域内,使用域解析符 来访问被隐藏的同名局部变量
扩大了全局变量的作用域
只适用于全局变量,局部变量不能用
#include <iostream> using namespace std; int sum = 5050; int main() { int arr[3] = { 15,31,34 }; int sum = 0; for (int i = 0; i < 3; i++) sum += arr[i]; cout << "局部变量sum>>" << sum << endl; ::sum += sum; cout << "全局变量sum>>" << ::sum << endl; return 0; }
域解析符的其它用法:
指明标识符属于哪个名字空间
指明成员函数属于哪个类
二、形式参数可带默认值
调用传值 > 默认值
单向值传递
声明和定义二选一添加默认值,不能都加
默认参数值 >> 从右往左;实际参数提供 >> 从左往右
也就是说,没有默认参数值的要提前写
#include <iostream> using namespace std; void Fun(int i, int j = 5, int k = 10); int main() { Fun(20); Fun(20, 30); Fun(20, 30, 40); return 0; } void Fun(int i, int j, int k) { cout << i << " " << j << " " << k << " " << endl; }
三、函数重载
功能相同或类似,只在形参的个数、类型、顺序方面有区别,可以用相同的函数名来命名
返回值类型不是区分重载函数的要素
如果 重载+默认值 >>> 注意避免二义性
若实参和形参不符合,C++ 编译器会自动做类型转换工作
#include <iostream> #include <string> using namespace std; int square(int x) { return x * x; } float square(float x) { return x * x; } double square(double x = 1.5) { return x * x; } int main() { cout << "square()=" << square() << endl; cout << "square(10)=" << square(10) << endl; cout << "square(2.5f)=" << square(2.5f) << endl; cout << "square(1.1)=" << square(1.1) << endl; return 0; }