//***** 引用 *****
void test1()
{
int num;
int &m_num = num;
num = 100;
std::cout << "num:" << num << std::endl;
std::cout << "m_num:" << m_num << std::endl;
/*
引用就是变量或者对象的别名,引用本身保存的是地址,所以它非常类似指针
注意:引用只能在声明时初始化,不能等待以后再赋值
例如上面例子:m_num也就代表num,操作m_num相当于操作num
引用和指针的区别:
1、指针是间接操作数据,而引用是直接操作数据
*/
}
//***** 引用的地址 *****
void test2()
{
int num = 100;
int &m_num = num;
std::cout << "num的地址:" << &num << std::endl; // 原名地址
std::cout << "m_num的地址:" << &m_num << std::endl; // 引用地址
/*
别名(引用)的地址就是原名的地址,所以更加说明了引用就是别名
两者地址相同,不管操作哪一个,都是操作同一个数据
别名其实就是常量别名,别名在声明时就已经初始化,它一旦初始化,就再也不能更改
*/
}
//***** 对象引用 *****
class Human
{
public:
Human(){};
~Human(){};
void SetValue(int x)
{
i = x;
}
int GetValue()
{
return i;
}
private:
int i;
};
void test3()
{
Human Mike;
Human &rMike = Mike; // 对象引用
rMike.SetValue(10);
std::cout << "i:" << rMike.GetValue() << std::endl;
}