C++入门语法
命名空间
命名空间可以存放类、对象、函数等,相当于一个大的代码块。在工程文件较大、对象较多时,可防止对象“重名”。
命名空间的定义
语法格式如下:
namespace <空间名> {
<内容>
}
例如:
//NameSpace.h
namespace NS {
int m = 10;
int n = 20;
int add(int x, int y) {
return x + y;
}
class MyClass {
int val;
MyClass * next;
};
int mul(int x);
int mul(int x) {
return x * x;
}
}
命名空间的使用方法:
展开方式之一:<空间名>::<成员名>
例如:NS::m 就是在访问 NS 空间中的 m 对象
//NameSpace.cpp
int main(void) {
//查看NS中m, n的值
printf("m = %d\n", NS::m);
printf("n = %d\n", NS::n);
//调用NS中的add() 和 mul()
int a = NS::add(NS::m, NS::n);
int b = NS::mul(NS::m, NS::n);
//显示结果
printf("m + n = %d\n", a);
printf("m * n = %d\n", b);
return 0;
}
使用方法之二:用 using 关键字将某个成员引入
语法:
using <空间名>::<成员名>;
int main(void) {
using NS::m;
printf("m = %d\n", m);
}
使用方法之三:using 关键字引入整个命名空间,可以使用 using namespace <空间名>; 的方式来引入命名空间,这样使用的时候就不用带空间名了。
int main(void) {
using namespace NS;
int a = add(m, n);
int b = mul(m, n);
printf("m + n = %d\n", a);
printf("m * n = %d\n", b);
return 0;
}
命名空间的细节
命名空间可以嵌套定义和使用
namespace N1 {
int a = 100;
namespace N2 {
int a = 1000;
}
}
int main(void) {
using namespace N1;
printf("N1::a = %d\n", a);
//命名空间N1已经被引入, 其中的成员可以被自由使用, 所以运用N2中的变量a不需要再写N1::N2::b
printf("N1::N2::a = %d\n", N2::a);
return 0;
}
在一个工程中可以有多个重名的命名空间,最终编译器会将它们整合到一个命名空间当中。
如下语言中在 test.h 和 test.c 中的两个命名空间到最后会被整合到一个命名空间中去。
//test.h
namespace NS {
int x = 10;
int y = 20;
}
//test.c
namespace NS {
int add(int x, int y) {
return x + y;
}
}
缺省参数
概念
给函数的参数一个默认的值, 如果调用的时候没有指定实参的值, 则把给定的默认值作为实参, 其中给定值的参数叫做 缺省参数
在下例中可以看出, 不给定实参的输出 0, 给定的输出 1145:
#include <iostream>
using namespace std;
void f(int a = 0) {
cout << "a = " << a << "\n";
}
int main(void) {
//不给参数
f();
//给参数
f(1145);
return 0;
}
分类
全缺省函数: 顾名思义, 就是所有的参数都有默认给定的值, 就像下面这个:
void f(int a = 1, int b = 2, int c = 3) {
cout << a << "\n";
cout << b << "\n";
cout << c << "\n";
}
int main(void) {
f();
return 0;
}
半缺省函数: 一部分参数给定了默认值. 如下:
void f(int a, int b = 2, int c = 3) {
cout << a << "\n";
cout << b << "\n";
cout << c << "\n";
}
int main(void) {
// f() //报错: 缺少参数
f(114); //输出 114, 2, 3
f(114, 514); //输出 114, 514, 3
f(114, 514, 1919); //输出 114, 514, 1919
return 0;
}
半缺省函数的注意事项:
-
参数必须从右往左依次给出, 必须从右向左指定值, 中间不能间断. 即, 带默认值的参数后面不能有不带默认值的参数.
void f(int a = 0, int b, int c = 10); //错误 void f(int a, int b = 0, int c = 10); //正确 -
缺省参数不能在函数声明和定义中同时出现. 缺省参数只能在函数声明中指定,不能在函数定义中重复指定。
正确做法: 声明时带缺省参数, 实现时不带
void f(int a, int b = 2, int c = 3); //正确 void f(int a, int b, int c) { ... }错误示范: 声明时和实现时都带缺省参数
void f(int a, int b = 2, int c = 3); //错误 void f(int a, int b = 2, int c = 3) { ... }
浙公网安备 33010602011771号