C++入门经典 笔记 (第十二章)创建引用

来源:互联网 发布:淘宝我是卖家在哪里找 编辑:程序博客网 时间:2024/06/07 06:49

这一章主要讲引用,其用处和前面讲的指针差不多,但用法要比指针容易些,总的来讲,引用就是一个变量的别名。创建引用时,使用另一个对象(目标)的名称来初始化它,从此以后,该引用就像是这个目标的另一个名称,对引用执行的任何操作实际上针对的就是目标。指针和引用的区别就是:指针是存储另一个对象的地址的变量,而引用是对象的别名。

创建引用

要创建引用,需要指定目标对象的类型、引用运算符(&)和引用名。如:int &rSomeRef = someint;这句语句的含义是,rSomeRef是一个int引用,被初始化为指向someint。

如果声明了引用但没有初始化,就将导致编译器出错,引用必须初始化。注意:这里的引用运算符(&)和前面所讲的地址运算符(&)是同一个符号,根据程序的上下文区分。

将地址运算符用于引用

如:int  &rSomeRef = intone;

        std ::cout <<&intone;   //输出变量intone的地址

        std ::cout <<&rSomeRef;  //也会输出变量intone的地址,而不是rSomeRef的地址

在C++中,无法获取引用本身的地址,因为它不像指针或其他变量的地址那样有意义。引用是在创建时初始化的,总是目标的同义词,通常,在使用引用时,不将地址运算符用于它,而像使用目标变量那样使用引用,不能给引用重新赋值,他始终是目标变量的别名。

可引用的目标

可引用任何对象,包括用户自己定义的对象。注意:我们创建的是指向对象的引用,而不是指向类或数据类型(如int)的对象。所以以下代码是错的:

int  &rIntRef = int; //错误

应该改为:int  age=20;

                    int  &rIntRef = age;

同样,当我们自己创建了cat类后,这些代码也是错的:

cat &rCatRef = cat; //错误

应该改为:cat  Frisky;

                    cat  &rCatRef = Frisky;

可以像使用对象那样使用指向对象的引用:访问成员数据和成员函数,使用类成员访问运算符(.),如:rCatRef.age,rCatRef.voice()等。

空指针和空引用

指针未初始化或被删除时,应将NULL赋给它,但对于引用来说,引用不能为空,让引用指向空对象的程序是非法的。

按引用传递函数参数

在第五章讲到,函数的参数是按值传递(对象值的备份)的,返回的结果不能修改原来的值,但按引用传递的方式就不同了,它有两种方式:使用指针和使用引用。他们的语法不同,但效果相同:不是在函数作用域内创建对象值的备份,而是将原始对象传递给函数。通过按引用传递对象,可让函数修改指向的对象。使用指针,传递的实际上是对象的地址,因此函数可直接操作该地址处的值。

如果函数是使用指针传递参数,则调用函数时,参数为变量的地址(如:&i);如果函数是是使用引用传递参数,则调用函数时,参数为变量(如:i)。


0 0
原创粉丝点击