1. 命名空间
- 作用: 实际上就是一个由程序设计者命名的内存区域,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开来。
- 访问方法:用 作用域解析符:: 来访问,AA : : x,AA表示空间域,x表示成员(名字)。
namespace AA1//AA1域(空间)
{
int a = 1;//成员
}
namespace AA2
{
int a = 2;
}
int a = 3;
int main()
{
int a = 4;
cout<<a<<end1;//输出4,就近原则
cout<<::a<<end1;//3,全局变量,域缺省时,表示全局域
cout<<AA1::a<<end1;//1,
cout<<AA2::a<<end1;//2,
}
2. C++的基本输入输出流。
cout是标准输出流对象,<< 是输出操作符;
cin是标准输入流对象,>>是输入操作符;
endl是换行操作符;
他们都属于C++标准库,所以都在std的名字空间里面。
1. C++怎么控制double等浮点类型的输出位数吗?
2. 怎么控制输出一个数字的八进制和16进制吗?
3. 重载
- 什么事函数重载:在同一作用域类,一组函数的函数名相同,参数列表不同(个数不同/类型不同),返回值可同可不同
- 为什么C语言不支持重载,而C++支持:例如函数:void function(int x, int y)
在C语言中,经过编译器编译后,库中的名字为 _function
而在C++中,经编译器编译后,库中的名字为_function_int_int, 即C++函数参数不同,函数名不同的函数在库中定义的函数名就不同。(与返回值无关)。
// _Z12OverloadFuncid
void OverloadFunc (int x, double d)
{}
// _Z12OverloadFuncdi
void OverloadFunc (double x, int d)
4. C++缺省参数
// 全缺省参数
int Add1 (int a = 10, int b = 20)
{
return a + b;
}
// 半缺省参数
int Add2 (int a, int b = 30)
{
return a + b;
}
////错误缺省参数
//int Add3 (int a = 40, int b)
//{
// return a + b;
//}
void Test ()
{
Add1();//结果:30
Add1(1);//21
Add1(1,1);//2
Add2(2);//32
Add2(2,2);//22
}
5. 指针和引用
指针我们在C语言中已经有所了解,就不用啰嗦,我们只看引用,和指针做比较
1. 引用的概念:
引用不是定义一个新的变量,而是给一个已经定义的变量重新起一个别名
2. 定义的格式为:
类型 &引用变量名 = 已定义过的变量名;
3. 引用的特点:
- 一个变量可取多个别名
- 引用必须初始化
- 引用只能在初始化的时候引用一次,不能改变为再引用其他的变量。
4. 使用方法:
void TestReference1 ()
{
int a = 1;
int& b = a;
cout<<"a:address->" <<&a<< endl;
cout<<"b:address->" <<&b<< endl;
a = 2;
b = 3;
int& c = b; // 引用一个引用变量,别名的别名
c = 4;
}
- 做参数:
//【引用传递】如果形参为引用类型,则形参是实参的别名。
void Swap (int& left, int& right)
{
int temp = left;
right = left ;
left = temp ;
}//会改变实参的值
//测试值传递/引用传递的效率
struct BigData
{
int array [1000];
};
void DealBigData (BigData& x)//35
{
x.array [0]= 0;
x.array [1]= 1;
x.array [2]= 2;
}
void DealBigData (Bigdata x)//125
{
}
#include <Windows.h>
void TestReference3 ()
{
BigData bd ;
int begin = GetTickCount ();
for (int i = 0; i < 1000000; ++i )
{
DealBigData(bd );//125
}
int end = GetTickCount ();
cout<<"cost time:" <<end - begin<<endl ;
}