本篇主要介绍C++入门的一些基础知识,包含命名空间、基本输入输出、缺省参数,着重介绍C++的简单内容,若有错误,还望大家不吝赐教。
1、命名空间
using namespace std;
相信大家在接触C++之初,都会先看到这一行代码,心里不由得疑惑,这一行代码是个啥?带着这个疑惑,了解了解namespace
这个关键字;
a、背景
顾名思义,namespace
便是命名空间;C++之所以提出C中所没有提到过的命名空间,是因为C中有个问题:
-
变量、函数名的冲突;
在项目中存在大量代码时,容易存在命名的冲突问题;
如下代码:
int rand = 10;
int main()
{
printf("%d\n", rand);
return 0;
}
结果会显示错误:rand重定义,以前定义为函数;明明敲代码时候一切正常,在跑起来之后却出现了问题;
原因是:我们自己定义的rand变量,与C中定义的rand函数发生了命名冲突。这便是提出命名空间的一个问题场景;
b、定义
定义命名空间,需用namespace
关键字,如下:
namespace x
{
int rand = 10;
int Add(int x, int y)
{
return x + y;
}
}
我们定义了名为X
的命名空间,其中有rand的整型变量,与Add自定义函数;这也是命名空间的普通定义方式。
补充规则如下:
- 命名空间可以嵌套定义,在A空间中,可以继续定义命名空间B;
- 可以在代码的不同位置定义相同名称的命名空间,最终会合成到一个命名空间中;
c、使用
以上为例,
- 添加命名空间的名称和作用域限定符
::
;
此时rand被明确指定为命名空间x
中的rand
,故代码正常用运行;
-
使用using将命名空间的某个成员引入;
需要注意的是,此时上述例子将不可用,因为即便引入了
x
中的rand
,rand
依旧在C中默认存在,因此使用时依旧会冲突;namespace x { int a = 10; int Add(int x, int y) { return x + y; } } using x::a; int main() { printf("%d\n", a); return 0; }
-
使用using引入命名空间;
namespace x { int a = 10; int Add(int x, int y) { return x + y; } } using namespace x; int main() { printf("%d\n", a); return 0; }
均可正常得到结果;
2、C++中的输入输出
C++中将输入输出取名为流输入流输出,取名为流,寓意数据像水一样从一个地方流到另一个地方。
a、运算符
>> 与 << ,分别为流提取与流插入运算符,用C的语言来说,可对应sanf
与printf
。
个人认为并不需要刻意记忆哪个运算符对应哪个操作函数,小箭头指向的地方便是数据流向的地方,如下:
int main()
{
int a;
char b;
// 箭头指向变量,代表给变量赋值,c++中,cin支持自动识别变量类型,分别赋值;
cin >> a >> b;
// 箭头指向cout,表示输出变量中的值,中间添加了'\n',利用换行将两个变量隔开,此时采用endl,也可达到一样的效果;
cout << a << '\n' << b << endl;
}
b、c++中输入输出的提升
cin 与 cout可以自动识别变量的类型,从而一样的输出代码达到不同的输出效果。
同时,加上后续运算符重载,cin与cout甚至可以对结构体使用一样的代码输入输出。
3、缺省参数
a、定义
在声明或定义函数时,可以给函数提供一个缺省值,在调用函数时,若未指定实参,则采用缺省值。如下
void func(int a = 10)
{
cout << a << endl;
}
int main()
{
func(1);
func();
return 0;
}
b、全缺省参数
顾名思义,函数中的每个参数都给上缺省值。
void func(int a = 1, int b = 2, int c = 3)
{
cout << a << endl;
cout << b << endl;
cout << c << endl;
}
此时调用,实参个数不同时,效果如下:
若实参数量不够,则函数会按从左到右顺序,依次给形参赋值,未赋值形参则采用缺省值。
c、半缺省参数
同样,半意味着只有一部分,给函数中的一部分参数给定缺省值。
void func(int a, int b, int c = 3)
{
cout << a << endl;
cout << b << endl;
cout << c << endl;
}
值得注意的是,此时调用func至少需要给出两个值,如下,func(10)
与func()
变得不可用;
屏蔽之后,输出如下:
d、注意
-
半缺省参数,必须从右到左依次给出,不可间隔;
-
缺省参数不可在声明与定义中同时出现;
若同时出现且值不同,编译器就无法知道选择哪一个。为了取消这种可能存在的二义性,C++便不允许在声明和定义中同时出现缺省值。