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

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

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


        







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值