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) { ... }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架