1.this指针
(1)this指针是一个类所隐含的指针,一个类(注意不是对象)只有一个this指针,this指针是该类的所有对象所共享的。
(2)当通过一个对象访问该对象的成员时,默认this指针指向该对象。
例如:
class Location
{
public:
int x;
int y;
void Init(int a, int b);
};
void Location::Init(int a, int b)
{
x = a; //对象调用时,等同于this->a
y = b;
}
2.引用
(1)定义:引用是对一个存储单元进行别名命名,也就是对一个变量起别名。
(2)符号:&
(3)表示:
数据类型 & 引用名 = 变量名;
要引用的变量单元必须事先存在;引用名和变量名共享同一个单元,对引用的操作实际上就是对变量的操作;引用只是一个名称,本身并不占据存储单元。
3.特别注意
引用的同时必须进行初始化(包括引用本身的初始化和被引用变量的初始化)
int num = 500;
int &ref = num;
错误的两种操作类型:
int &ref;//错误
int num;
int &ref = num;//错误
4.引用带来的变化
int main()
{
int x = 3, y = 5;
exchange(x, y);
cout<<"x = "<<x<<", y = "<<y<<endl;
}
void exchange(int &xn, int &yn)
{
int tem;
tem = xn;
xn = yn;
yn = tem;
}
分析:这个调用是可以互换x和y的值的。在函数调用的过程中,隐形的包含着这样一个过程:
int &xn = x
int &yn = y
然而在exchange函数中对引用的操作,即是对x和y实际存储单元的操作。
5.引用与常量
const int num = 500;
int &ref = num;
cout<<ref;//500
ref = ref + 50;
cout<<ref;//550
cout<<num;//500
分析:当引用的常量单元要进行赋值时,系统将生成一个临时的变量单元,将所引用的常量单元的值放入该单元中,然后再进行操作。
当引用的是变量单元时,赋值则是直接对该变量单元的操作。
6.指针的引用
int b = 6;
int *a = &b;
int *&refp = a;//定义了一个指针引用refp引用指针变量a。
7.引用需要注意的几点问题
引用不是变量,不分配单元。
不可以定义引用的引用。
不可以建立数组的引用,引用只可以引用一个变量值(一个对象也算做一个变量)。