1.命名空间:
在一个给定的作用域中第一的名字在改作用域中必须是唯一的,对于庞大的,复杂的程序而言,这无疑很难满足。也是我们自己可以做到不是用重复的名字,但是在实际工作中,在一个项目里,不仅仅有你个人的代码,而且还有你的团队其他人的代码,这就是一个很大的问题,一旦名字冲突就会做成很多问题。我们将这样由名字冲突问题称为命名空间污染。一般情况我们我们都会将名字设置的更长一些,或者用下划线之类的东西加以区分,但是这样的使我们在编写和使用时很麻烦,而命名空间为这个问题提供了很有效的机制。每个命名空间都是一个独立的域,但是在不同的命名空间里,可以出现重复的名字,这样就很好的解决了上述的问题。
命名空间的定义:
命名空间定义以关键字namespace开始,后面接命名空间的名字。如下:
如上图所示,在命名空间A和命名空间B中都有变量a,并且都有一个类A和他的默认构造函数,这里编译也不会有任何问题,因为这两个不在同一个域内,所以并不会有名字冲突的问题存在。当我们要使用命名空间的成员时,可以中作用域符加在成员前,但这样很麻烦,所以又提供了一种方式来获得我们在命名空间的名字,using namespace +空间名字来访问。如下:
2.c++基本输入输出流:
c++并没有直接定义进行输入输出的的任何语句,这种功能是由标准库提供的,即我们经常使用的iostream库。下面简单的使用cin ,cout。
3.重载:
重载的定义:1.相同的作用域 2.函数名相同 3.参数不同
c++支持重载的原因:函数名的修饰规则。
4.指针与引用的区别:
下面我们通过一个简单的小程序来看一下汇编是怎么做的:
下面时指针和引用在作为函数参数进行时的区别:
void Swap(int* a, int*b)
{
int temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int a = 10;
int b = 20;
cout <<"a= "<<a<< " " <<"b= "<< b << endl;
Swap(&a,&b);
cout << "a= " << a << " " << "b= " << b << endl;
return 0;
}
从上面的结果可以看出指针,可以改变实参的值,其中通过解引用*来访问到实参在内存的存储单元从而改变实参的值。但是有时候指针也不是那么好用,如下面代码所示:
void text1(int *p)
{
int a = 10;
p = &a;
}
void text2(int &p)
{
p = 20;
}
int main()
{
int a = 10;
//指针传参
int *p1 = &a;
text1(p1);
cout << "指针传参:" << a << endl;
//引用传参
int &p2 = a;
text2(p2);
cout << "引用传参:" << a << endl;
return 0;
}
这里可以看出,指针并没有达到想要的结果,因为这里是值传递形参只是一份临时拷贝。而引用则得到了想要的结果,因为实际上传递的是实参本身,并没有临时拷贝,这里引用既节省了空间,也节约了时间。是很好的手段,在递归中,引用的使用就很方便了。