关于引用的问题
为什么Array& 引用就是 arr1了? 又没有明确表明 &Array=arr1啊!
还有 Array* 怎么就是指针了?不是&Array么?
还有 输出&arr1 变成arr1*可以么?
指针部分没有学先问下谢谢了!
为什么Array& 引用就是 arr1了? 又没有明确表明 &Array=arr1啊!
还有 Array* 怎么就是指针了?不是&Array么?
还有 输出&arr1 变成arr1*可以么?
指针部分没有学先问下谢谢了!
2017-01-03
你说的相关内容在视频中视频作者的代码是这样子的:Array& Array::printInfo(){return *this;}
其实,这涉及到两部分的内容,一个是引用,一个是this指针。
我认为视频作者在讲到这一部分的时候有一个小失误。如楼上所说,&是单目运算符,&修饰的内容是在&的后面,所以&这个引用符修饰的内容应该是后面的类:Array,而前面的Array只是一个类型标识符。
下面进入正题:因为用到了return *this;这个语句,所以在成员函数中用到了参数传递。如果是使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本,副本是临时的,在参数传递完成后就会消失,因此对副本的操作是不会影响函数本身的(也就是视频中的成员函数arr1.Info())。而如果使用引用来传递参数,是对函数本身的操作。
视频中的那段代码,可以拆分成两部分来理解:一是
为了实现链式表达式(也就是视频中在demo.cpp中演示的连续使用.符号,也可以是连等号a=b=c诸如此类),return *this的目的就在于此。通过返回成员函数来实现函数的连续调用。二是为了实现对函数本身的操作(准确来说是对函数的引用),用&引用符后,系统将不会另外分配新的内存来创建一个副本以传递参数,而是直接对函数的引用来进行参数传递,这是发生在同一块内存地址里的。
简单来说,使用引用来传递参数不会拷贝一个副本,直接对函数参数操作,而this指针可以实现链式表达式,这就是那段代码的精华。
最后再科普一点小知识:使用指针来传递参数也不会产生临时副本,因此视频中利用指针传递函数参数与引用在结果上是一致的。
以上内容完全按照个人思路手打出来,时间仓促,因此在语言表达上面可能一时间不太容易理解,也可能会出纰漏。如果有什么疑问可以追问,我将尽力解答,大家共同进步。
举报