[C++基础]001_和的区别
C++是在C的基础上发展的,它是兼容C的。但只是兼容,它有自己完整的一套语言规则,当然你有自己的特点,其一便是<iostream>。
C++引入了名字空间namespace,它避免了变量和函数名字重复冲突,这是一个很好的机制,而<iostream>便是符合这一套实现的代码。
而<iostream.h>则是沿用了C风格的头文件,这个文件填入后,可以直接使用诸如cout、cin之类的函数。
总结:
■ <iostream> C++语言用,如果要使用cout,需要加入using namespace std,或使用std::cout
■ <iostream.h> C风格,引入可直接使用cout
C++基础]002_名字空间(namespace)
1 #include <iostream>
2 using namespace std;
3
4 namespace A{
5 int a = 1;
6 }
7
8 namespace B{
9 int b = 2;
10 }
11
12 namespace C{
13 int c = 3;
14 }
15
16 int main(){
17
18 int a = 10;
19 int b = 20;
20 int c = 30;
21
22 using namespace A;
23 using namespace B;
24 using namespace C;
25
26 cout<<"a = "<<a<<endl;
27 cout<<"b = "<<b<<endl;
28 cout<<"c = "<<c<<endl;
29
30 cout<<"a::a = "<<A::a<<endl;
31 cout<<"b::b = "<<B::b<<endl;
32 cout<<"c::c = "<<C::c<<endl;
33
34 system("pause");
35 return 0;
36 }
以上代码,会输出什么呢?答案如下:
1 a = 10
2 b = 20
3 c = 30
4 a::a = 1
5 b::b = 2
6 c::c = 3
7 请按任意键继续. . .
可见,函数内定义的变量声明会覆盖命名空间里的变量声明。所以,这里需要编程者注意,如果你在名字空间里做了一些赋值操作,那么在调用它的地方,一定要注意会不会被覆盖。
注:最好的调用方法是名字空间::变量名。
1 namespace A{
2 int a = 1;
3 }
4
5 namespace B{
6 int b = 2;
7 }
8
9 namespace C{
10 int c = 3;
11 int b = 3;
12 }
13
14 int main(){
15
16 //int a = 10;
17 //int b = 20;
18 //int c = 30;
19
20 using namespace A;
21 using namespace B;
22 using namespace C;
23
24 cout<<"a = "<<a<<endl;
25 cout<<"b = "<<b<<endl;
26 cout<<"c = "<<c<<endl;
上面的代码是通不过编译的,因为变量b的调用不明确,这就是所谓的“名字冲突”。
C++是在C的基础上发展的,它是兼容C的。但只是兼容,它有自己完整的一套语言规则,当然你有自己的特点,其一便是<iostream>。
C++引入了名字空间namespace,它避免了变量和函数名字重复冲突,这是一个很好的机制,而<iostream>便是符合这一套实现的代码。
而<iostream.h>则是沿用了C风格的头文件,这个文件填入后,可以直接使用诸如cout、cin之类的函数。
总结:
■ <iostream> C++语言用,如果要使用cout,需要加入using namespace std,或使用std::cout
■ <iostream.h> C风格,引入可直接使用cout
1 #include <iostream>
2 using namespace std;
3
4 namespace A{
5 int a = 1;
6 }
7
8 namespace B{
9 int b = 2;
10 }
11
12 namespace C{
13 int c = 3;
14 }
15
16 int main(){
17
18 int a = 10;
19 int b = 20;
20 int c = 30;
21
22 using namespace A;
23 using namespace B;
24 using namespace C;
25
26 cout<<"a = "<<a<<endl;
27 cout<<"b = "<<b<<endl;
28 cout<<"c = "<<c<<endl;
29
30 cout<<"a::a = "<<A::a<<endl;
31 cout<<"b::b = "<<B::b<<endl;
32 cout<<"c::c = "<<C::c<<endl;
33
34 system("pause");
35 return 0;
36 }
以上代码,会输出什么呢?答案如下:
1 a = 10
2 b = 20
3 c = 30
4 a::a = 1
5 b::b = 2
6 c::c = 3
7 请按任意键继续. . .
可见,函数内定义的变量声明会覆盖命名空间里的变量声明。所以,这里需要编程者注意,如果你在名字空间里做了一些赋值操作,那么在调用它的地方,一定要注意会不会被覆盖。
注:最好的调用方法是名字空间::变量名。
1 namespace A{
2 int a = 1;
3 }
4
5 namespace B{
6 int b = 2;
7 }
8
9 namespace C{
10 int c = 3;
11 int b = 3;
12 }
13
14 int main(){
15
16 //int a = 10;
17 //int b = 20;
18 //int c = 30;
19
20 using namespace A;
21 using namespace B;
22 using namespace C;
23
24 cout<<"a = "<<a<<endl;
25 cout<<"b = "<<b<<endl;
26 cout<<"c = "<<c<<endl;
上面的代码是通不过编译的,因为变量b的调用不明确,这就是所谓的“名字冲突”。