一· 命名空间(namespace)
正常namespace的使用
include <stdio.h>
#include <stdlib.h>
// 1. 正常的命名空间定义
// wzh是命名空间的名字,⼀般开发中是⽤项⽬名字做命名空间名。
namespace bit
{
// 命名空间中可以定义变量/函数/类型
int rand = 10;
int Add(int left, int right)
{
return left + right;
}
struct Node
{
struct Node* next;
int val;
};
}
int main()
{
// 这⾥默认是访问的是全局的rand函数指针
printf("%p\n", rand);
// 这⾥指定bit命名空间中的rand
printf("%d\n", wzh::rand);
return 0;
}
命名空间嵌套
//在kj这个公司里面有zs ls 两个人 各自用自己命名空间里的东西
namespace kj
{
// zs
namespace zs
{
int rand = 1;
int Add(int left, int right)
{
return left + right;
}
}
// ls
namespace ls
{
int rand = 2;
int Add(int left, int right)
{
return (left + right)*10;
}
}
}
int main()
{
printf("%d\n", kj::zs::rand);
printf("%d\n", kj::ls::rand);
printf("%d\n", kj::zs::Add(1, 2));
printf("%d\n", kj::ls::Add(1, 2));
return 0;
}
多文件定义同名namespace
多文件定义同名namespace代码量有点长,这边就不展示了,下面列出需要注意的点
- 多⽂件中可以定义同名namespace,他们会默认合并到⼀起,就像同⼀个namespace⼀样
namespace定义
- 命名空间中可以定义变量/函数/类型等。
- namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量
- namespace只能定义在全局,当然他还可以嵌套定义。
命名空间的使用
- 指定命名空间访问,项⽬中推荐这种⽅式。
namespace bit { int a = 0; int b = 1; } int main() { printf("%d\n", N::a); return 0; }
- using将命名空间中某个成员展开,用于经常访问的不存在冲突的成员推荐这种⽅式。
namespace bit { int a = 0; int b = 1; } using N::b;//将命名空间中某个成员展开 int main() { printf("%d\n", N::a); printf("%d\n", b); return 0; }
- 展开命名空间中全部成员,项⽬不推荐,冲突⻛险很⼤,⽇常⼩练习程序为了⽅便推荐使⽤。
namespace bit { int a = 0; int b = 1; } using namespce N; //将命名空间中全部成员展开 int main() { printf("%d\n", a); printf("%d\n", b); return 0; }
二· 缺省参数
- 在调⽤该函数时,如果没有指定实参 则采⽤该形参的值缺省
- 全缺省就是全部形参给缺省值
// 全缺省 void Func1(int a = 10, int b = 20, int c = 30) { cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "c = " << c << endl << endl; }
- 半缺省就是部分形参给缺省值(不是一半给缺省值)
注意:半缺省参数必须从右往左 依次连续缺省,不能间隔跳跃给缺省值。
// 半缺省 void Func2(int a, int b = 10, int c = 20) { cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "c = " << c << endl << endl; }
- 带缺省参数的函数调⽤,C++规定必须从左到右依次给实参,不能跳跃给实参。
// 半缺省 void Func2(int a, int b = 10, int c = 20) { cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "c = " << c << endl << endl; } int main() { //调用是必须从左往右给值,不能跳跃传参 Func2(); Func2(1); Func2(1,2); Func2(1,2,3); }
- 函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现,规定必须函数声明给缺省值。
函数重载
C++⽀持在同⼀作⽤域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者 类型不同。
注意:返回值不同不能作为重载条件,因为调用时无法区分
参数类型不同
// 1、参数类型不同 int Add(int left, int right) { cout << "int Add(int left, int right)" << endl; return left + right; } double Add(double left, double right) { cout << "double Add(double left, double right)" << endl; return left + right; }
参数个数不同
// 1、参数个数不同 int Add(int left, int right) { cout << "int Add(int left, int right)" << endl; return left + right; } int Add(int left) { return left; }
参数类型顺序不同
// 3、参数类型顺序不同 void f(int a, char b) { cout << "f(int a,char b)" << endl; } void f(char b, int a) { cout << "f(char b, int a)" << endl; }
标签:rand,入门,int,基础,namespace,缺省,C++,printf,命名 From: https://blog.csdn.net/2301_77331799/article/details/141016982特殊情况报错
// 下⾯两个函数构成重载 // f1()调⽤时,会报错,存在歧义,编译器不知道调⽤谁 void f1() { cout << "f()" << endl; } void f1(int a = 10) { cout << "f(int a)" << endl; }