一.命名空间
1.引言
在我们编写代码时,我们创建的种种变量可能与环境或他人创建的变量产生冲突
举个例子
int rand = 0;
int main()
{
int rand = 1;
printf("%d", rand);
return 0;
}
这里要先说明局部变量和全局变量的概念,简单理解为main函数里的叫局部变量,main函数外的叫全局变量。变量名相同时,局部变量优先 。这段代码的结果自然而然为1。
#include<cstdlib>
int rand = 0;
int main()
{
int rand = 1;
printf("%d", rand);
return 0;
}
这段代码的不同在于我声明了头文件<cstdlib>,这时候编译会报错。
这就是因为我命名的rand与标准库函数中的rand重名。https://legacy.cplusplus.com/reference/cstdlib/rand/?kw=rand
那如果我们就想用rand作为变量名可不可以?当然可以,C++的创始人本贾尼·斯特劳斯特卢普就为我们提供了方法。
2.namespace的定义和使用
这个方法就是使用namespace关键字。
(1)定义
定义命名空间,需要使用namespace关键字,后面写上命名空间的名字和一对{}。
还是以刚才的代码为例。
namespace ATaylorSu
{
int rand = 0;
}
有意思的是,如果我们的空间名字重复,就可以改用套娃的方式 来命名。
namespace AT
{
namespace ATaylorSu
{
int rand = 2;
}
}
namespace ATaylorSu
{
int rand = 0;
}
例如这样
(2)使用
我们已经明白了怎么命名空间,接下来就要明白怎么使用。
总体来说,命名空间的使用有三种方式:
1.加命名空间名称及作用域限定符
namespace ATaylorSu
{
int rand = 3;
}
int main()
{
int rand = 1;
printf("%d", ATaylorSu::rand);
return 0;
}
两个“::”就表示作用域限定符。
2.使用using namespace 命名空间名称引入
这个可以理解为将namespace变为一个公共区域。
using namespace ATaylorSu;
int main()
{
printf("%d\n", ATaylorSu::rand);
return 0;
}
3.使用using将命名空间中某个成员引入
这种适合引空间中某个变量。
using ATaylorSu::rand;
int main()
{
printf("%d\n", ATaylorSu::rand);
return 0;
}
这里要留意这种方法和前两种编写方式不同。
二.C++输入和输出
1.引言
这里我想向我第一次接触C语言时那样,呈现“Hello World”,我应该用什么方法呢?
#include<iostream>
using namespace std;
int main()
{
cout << "Hello World" << endl;
return 0;
}
如图,用C++的方式写出"Hello World",头文件<iostream>不用多说,这里我想说一下”using namespace std“,有了前面的讲解,我们一眼明白这是第三者namespace的使用法,我们可以将std理解为其是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中。
2.cout和cin
(1)cout
上述代码中,不同于 printf("Hello World") 的是"cout"和"endl"和"<<",这三者不难理解。
cout是标准输出对象(控制台),<<是流插入运算符,endl是结束。
cout的作用和printf类似,但也有不同,待我们看完cin后说明不同之处。
(2)cin
int main()
{
int i;
cin >> i;
cout << i << endl;
return 0;
}
如果我告诉你cin和scanf一样你能不能立刻理解cin的用法?
这里要注意cin的符号是">>",不要和cout的弄混。
(3)不同
细心的你可能发现了,我们在用cout和cin时不需要声明对象的类型,如整形对应 %d ,浮点数对应 %f ,这便是C++和C的区别,不需要像printf/scanf输入输出时那样,需要手动控制格式。 C++的输入输出可以自动识别变量类型。
三.缺省参数
1.引言
在声明函数的某个参数的时候为之指定一个默认值,在调用该函数的时候如果采用该默认值,你就无须指定该参数。
2.分类
(1)全缺省参数
void Fun(int a = 1,int b = 2,int c = 3)
{
cout << a << " " << b << " " << c << endl;
}
int main()
{
Fun();
Fun(10);
Fun(10,20);
Fun(10,20,30);
return 0;
}
(2)半缺省参数
void Fun(int a, int b = 20, int c = 30)
{
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl << endl;
}
int main()
{
Fun(1);
Fun(1,2);
Fun(1,2,3);
return 0;
}
要特别注意,半缺省参数必须从右往左依次来给出,不能间隔着给 。