C++ 都需要包含的头文件#include<iostream> ,即输入输出流。C++中的头文件都没有 .h 后缀,包含了 .h 后缀的头文件是兼容C语言的头文件。主函数与C语言写法相同,控制台输出采用更强大的coutcout可以实现各种类型变量的输出,整型,字符型,字符串等等,而且可以实现连续输出。我们知道,C语言中的控制台输出常用printf()函数,那么cout到底是什么?是函数?

在频繁使用cout前还是应该正确认识一下它,cout其实是一个对象,是iostream类下的一个对象,<<其实是cout的一个成员函数。可以通过尝试发现,如果去掉using namespace std;这一行代码,cout处就会报错。

1
2
3
4
5
6
7
8
9
10
11
#include <iostream> //input output stream
#include <string.h> //C语言的头文件
#include <string> //C++的头文件
using namespace std; //去掉这一行会有什么问题?
int main()
{
int a=100;
int b=200;
cout << a <<' '<<"hello";
return 0;
}

原因在于,iostream类是命名空间 std 下的类。命名空间也是C++比C语言有优势的一个地方,在C语言的一个项目中,不同文件下的函数名,全局变量名称等都是不允许重复的,由于项目的体量可能太大,很容易总成命名冲突。在C++中,就可以有效的解决这个问题,借助命名空间,在不同的命名空间下的函数,变量是可以重名的。创建一个自己的命名空间只需在自己写的代码外层加上一个namespcae WGX

1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
namespace WGX

int a=100;
void print()
{
cout<<"这是WGX的命名空间"
}

在另一个文件中

1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
namespace gxw

int a=100;
void print()
{
cout<<"这是gxw的命名空间"
}

在其他文件中,想要调用WGX命名空间下的print()函数,就需要加上一行using namespace WGX代码。

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream> //input output stream
using namespace WGX;
//using namespace gxw;
using namespace std;
int main()
{
int a=100;
int b=200;
cout << a <<' '<<"hello";
print();
return 0;
}

即使这样,也会带来一定的问题,如果上面的代码块中的注释没有被注释掉,就会报错。原因是两个不同的命名空间下有相同名称的函数,这时需要用命名空间加作用域符号::来显式的说明print()是哪个命名空间下的函数。当显式的指出命名空间时,也就可以省略了using namespace xxx这行代码了,可以更有效的避免出错。

1
2
3
4
5
6
7
8
9
10
#include <iostream> //input output stream
int main()
{
int a=100;
int b=200;
std::cout << a <<' '<<"hello";
WGX::print();
gxw::print();
return 0;
}

还有下面一种情况,文件中存在一个全局的函数print(),同时又引入了命名空间WGX,这是该如何调用全局的函数呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream> //input output stream
void print()
{

}
using namespace WGX;
int main()
{
int a=100;
int b=200;
std::cout << a <<' '<<"hello";
print(); //调用命名空间WGX下的print()函数
::print();//在函数前加作用域符号 :: 表示调用全局函数
return 0;
}

下面介绍cinendlcin是输入函数,功能类似于scanf(),

1
2
int n=0;
cin >> n;

输出n

1
std::cout<<n<<endl;

endl直观感受就是换行,类似于\n,但是 char a=endl 代码却不能通过编译。关于endl,目前只需要记住它的作用即可,清空缓冲区并换行


2020-05-13 22:28:35 星期三