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.htest.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) {
    ...
    }
posted @   codels  阅读(1)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示