学科分类
目录
C++基础

this指针

由上节介绍的知识我们了解到,类中每个对象的数据成员都占用独立空间,但成员函数是共享的,可是各个对象调用相同的函数时,显示的是对象各自的信息,这是如何实现的呢?

若上节案例中定义两个类对象myfstcar、myseccar,在main()函数中分别调用set_wheels()函数设置两个对象的车轮数量,则显示出的是不同的内容,如例1所示。

例1

 1    #include <iostream>
 2    using namespace std;
 3    
 4    class Car                                   //定义类Car
 5    {
 6    //成员函数
 7    public:
 8        void disp_welcomemsg();                 //声明disp_welcomemsg()函数
 9        int get_wheels();                       //声明get_wheels()函数
 10        void set_wheels(int);                   //声明set_wheels()函数
 11        //数据成员
 12    private:
 13        int m_nWheels;
 14    };
 15    void Car::disp_welcomemsg()         //类成员函数disp_welcomemsg()的实现
 16    {
 17        cout << "Welcome to the car world!" << endl;
 18    }
 19    int Car::get_wheels()               //类成员函数get_wheels()的实现,获取车轮数
 20    {
 21        return m_nWheels;
 22    }
 23    void Car::set_wheels(int n)         //类成员函数set_wheels()的实现,设置车轮数
 24    {
 25        m_nWheels = n;
 26    }
 27    int main()
 28    {
 29        Car myfstcar, myseccar;          //定义类对象myfstcar、myseccar
 30    
 31        myfstcar.set_wheels(4);          //设置myfstcar的车轮数量为4
 32        myseccar.set_wheels(6);          //设置myseccar的车轮数量为6
 33        //访问成员函数,显示车轮数量
 34        cout << "my first car wheels num = " << myfstcar.get_wheels() << endl;   
 35        cout << "my second car wheels num = " << myseccar.get_wheels() << endl;
 36        
 37         system("pause");
 38        return 0;
 39    }

运行结果如图1所示。

图1 例1运行结果

从运行结果可知myfstcar、myseccar两个不同对象调用相同的成员函数时,操作的内容与对象相关,会得到各个对象对应的显示结果,成员函数是如何区分不同对象的?

每个类的成员函数都隐含有一个指向被调用对象的指针,这个指针被称为“this指针”。程序编译后,成员函数中会包含this指针,如编译后成员函数set_wheels()的形式如下所示:

void Car::set_wheels(int n, Car *this)        
{
  this->m_nWheels = n;
}

当对象myfstcar调用函数时,this指针指向对象myfstcar,会引用到myfstcar对象的数据成员,myseccar对象调用函数时,则this指针指向myseccar。

C++规定,当一个成员函数被调用时,系统自动向它传递一个隐含的参数,该参数是一个指向调用该函数的对象的指针,从而使成员知道该对哪个对象进行操作,在程序中,使用关键字“this”引用该指针。this指针是C++实现封装的一种机制,它将对象和该对象调用的成员函数联系在一起,使得从外部看来,每个对象都拥有自己的成员函数,因此,我们可以在函数中使用this指针访问成员变量或调用成员函数,形式如下所示:

(*this).成员变量或函数
this->成员变量或函数

由于this指针是指向当前对象的指针,所以可以在函数中把this指针当参数使用,或从函数中返回,用作返回值时,形式如下所示:

  reutrn this;
  return *this;

凡是想在成员函数中操作当前对象,都可以通过this指针完成。

点击此处
隐藏目录