命名空间,重载,指针与引用

来源:互联网 发布:电工鞋 绝缘鞋 知乎 编辑:程序博客网 时间:2024/05/17 21:50

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;}

这里可以看出,指针并没有达到想要的结果,因为这里是值传递形参只是一份临时拷贝。而引用则得到了想要的结果,因为实际上传递的是实参本身,并没有临时拷贝,这里引用既节省了空间,也节约了时间。是很好的手段,在递归中,引用的使用就很方便了。


        







原创粉丝点击