C++语言笔记系列之五——引用(&)和this指针详解

来源:互联网 发布:淘宝评价了怎么看不到 编辑:程序博客网 时间:2024/05/22 07:03

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.引用需要注意的几点问题
引用不是变量,不分配单元。
不可以定义引用的引用。
不可以建立数组的引用,引用只可以引用一个变量值(一个对象也算做一个变量)。

7.填空使下面程序的输出结果为10.
#include <iostream.h>

class Myclass
{
public:
  Myclass(int x)
  {
    _____________
  }
  int Getnum()
  {
    return x;
  }
private:
  int x;
};

int main()
{
  Myclass my(10);
  cout<<my.Getnum()<<endl;
}
解答:此处应该填的是this->x = x;。
8.全局对象
定义:在函数体外定义的对象。
作用域:从定义点开始,到程序运行结束。
9.全局对象的几点说明
(1)全局对象在编译阶段系统即为其分配存储单元,即在main函

数运行之前调用全局对象的构造函数。
(2)在整个程序运行结束时调用全局对象的析构函数。
注:若有多个全局对象,先构造的后析构。
10.new运算符动态的创建对象
指针变量 = new 类名;//动态创建一个对象单元,但无初始化值
指针变量 = new 类名(初始化值);//动态创建并给定初始化值
11.动态对象的释放
delete 指针变量;
delete的使用
(1)delete必须使用new运算符分配出来的对象。
(2)适用于空指针。
(3)执行delete操作时,调用对象的析构函数。

7 1