【C++】解析this指针

本文介绍了C++中this指针的概念及应用。通过实例详细解释了this指针如何帮助定位对象成员,并说明了哪些情况下不会存在this指针。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个类可以有多个对象,怎么能保证引用的是所指定的对象的数据成员呢?

在每一个成员函数中都包含一个特殊的指针,这个指针的名字是固定的,即this。它是指向本类对象的一个指针,他的值是当前被调用的成员函数所在对象的起始地址。

举例:

#include<iostream>                                                                                                                   
using namespace std;                                                                                                                 
class person{                                                                                                                        
  public:                                                                                                                            
    person(int year=1990,int month=1,int day=1)                                                                                      
      :_year(year)                                                                                                                   
       ,_month(month)                                                                                                                
       ,_day(day)                                                                                                                    
  {}                                                                                                                                 
    void Print(){                                                                                                                    
      cout<<_year<<"-"<<_month<<"-"<<_day<<endl;                                                                                     
    }                                                                                                                                
  private:                                                                                                                           
    int  _year;                                                                                                                      
    int  _month;                                                                                                                     
    int  _day;                                                                                                                       
};                                                                                                                                   
int main(){                                                                                                                          
  person p1(1996,4,27);                                                                                                              
  person p2(1995,5,27);                                                                                                              
                                                                                                                                     
  p1.Print();                                                                                                                        
  p2.Print();                                                                                                                        
}

this指针是隐式使用的,它作为参数被传递给成员函数,实际上Print函数的定义Wie:

void Print(person *this)
{
    cout<<this->_year<<"-"<<this->_month<<"-"<<this->_day<<endl;
}

当调用p1.Print()时,就把p1的起始地址赋给了this指针。

在调用成员函数时实际上是p1.Print(&p1),即将p1的地址赋给this指针,然后按照this指针的指向去引用其他成员。

注意:

this指针是隐式的,是编译系统自动实现的,不可以显示的在星灿鸿添加this指针,也不必将p1的地址传给this。可以在成员函数内显示的使用this指针。

并不是所有的成员函数都有this指针。比如构造函数,静态成员函数就没有this指针,因为构造函数只在创建对象的时候调用一次,静态成员函数是属于类的,不属于对象,所以没有this指针。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值