1.c++的命名域
名字空间域是随标准c++而引入的。它相当于一个更加灵活的文件域(全局域),可以用花括弧把文件的一部分括起来,并以关键字namespace开头给它起一个名字
例:
namespace name1
{
int a=0;
}
namespace name2
{
int a=1;
}
标准c++库中的所有组件都是在一个被称为std的名字空间中声明定义的,在采用标准c++的平台上使用标准c++库中的组件,只要写一个using指示符:
using namespace std;
就可以直接使用标准c++库中的所有成员;或者std::成员的方式使用c++库里的成员。(::是作用域解析符)
#include<iostream>//c++库的头文件
#include<stdlib.h>//syztem的头文件
using namespace std;//std 是c++标准库的名字空间
namespace my//创建一个为my的名字空间
{
int a = 100;
}
namespace you//创建一个为you的名字空间
{
int a = 90;
}
int a = 80;//存在于std中
void main()
{
int a = 70;
printf("%d %d %d %d\n", a, ::a, my::a, you::a);//(::a)没有指明命名域则为全局命名域中
system("pause");
return;
}
打印结果:70 80 100 90
也可以修改命名域中的值
#include<iostream>//c++库的头文件
#include<stdlib.h>//syztem的头文件
using namespace std;//std 是c++标准库的名字空间
namespace my//创建一个为my的名字空间
{
int a = 100;
}
namespace you//创建一个为you的名字空间中创建一个为my1的名字空间
{
namespace my1
{
int a = 90;
}
}
void main()
{
my::a = 10;
you::my1::a = 9;
std::cout << my::a << you::my1::a << endl;
system("pause");
return;
}
打印结果:10 9
cout是标准输出流对象,<<是输出操作符
cout是标准输入流对象,>>是输出操作符
endl是换行操作符;
他们都属于c++标准库,所以都在std的名字空间里面
2.c++重载函数
什么是重载函数:在同一作用域内,一组函数的函数名相同,参数列表不同,返回值可以相同也可以不同。
使用重载函数需要满足以下任意条件
参数个数不同
参数类型不同
例
#include<iostream>//c++库的头文件
#include<stdlib.h>//syztem的头文件
using namespace std;//std 是c++标准库的名字空间
void func(int i)
{
cout << i << endl;
}
void func(int i,double j)
{
cout << i <<" "<<j<<endl;
}
void func(double j,int i)
{
cout << i << " "<< j << endl;
}
void main()
{
func(2);
func(4.0, 4);
func(3, 3.0);
system("pause");
return;
}
打印结果:
2
4 4
3 3
为什么c++支持重载c不知处重载?
答:c和c++函数名在汇编中的修饰不同,即在返汇编时c中的函数名是什么就是什么然而c++会有函数名的变化。
c++ c
3.缺省参数
#include<iostream>
#include<stdlib.h>//syztem的头文件
using namespace std;
int Add1 (int a=0, int b=0)//全缺省参数
{
return a + b;
}
int Add2(int a, int b = 0)//半缺省参数(半缺省只能缺省右边的并且是连续的)
{return a + b;
}
void main()
{
cout << Add1() << endl;
cout << Add1(2) << endl;
cout << Add1(2,2) << endl;
cout << Add2(3) << endl;
cout << Add2(3,3) << endl;
system("pause");
return;
}
打印结果:
0
2
4
3
6