this指针在C++中不需要主动设置

1. this 指针的引出
我们先来定义一个日期类 Date
class Date
{
public :
        void Init ( int year , int month , int day )
{
        _year = year ;
        _month = month ;
        _day = day ;
}
void Print ()
{
        cout << _year << "-" << _month << "-" << _day << endl ;
}
private :
        int _year ; //
        int _month ; //
        int _day ; //
        int a ;
};
int main ()
{
        Date d1 , d2 ;
        d1 . Init ( 2022 , 1 , 11 );
        d2 . Init ( 2022 , 1 , 12 );
        d1 . Print ();
        d2 . Print ();
        return 0 ;
}
对于上述类,有这样的一个问题:
Date 类中有 Init Print 两个成员函数,函数体中没有关于不同对象的区分,那当 d1 调用 Init 函数时,该函数是如何知道应该设置d1 对象,而不是设置 d2 对象呢?
C++ 中通过引入 this 指针解决该问题,
即: C++ 编译器给每个 非静态的成员函数 增加了一个隐藏的指针参 数,让该指针指向当前对象 ( 函数运行时调用该函数的对象 ) ,在函数体中所有 成员变量 的操作,都是通过该 指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成
2. this 指针的特性
        1. this 指针的类型:类类型 * const ,即成员函数中,不能给 this 指针赋值。
        2. 只能在 成员函数 的内部使用
        3. this 指针本质上是 成员函数 的形参 ,当对象调用成员函数时,将对象地址作为实参传递            给  this 形参。
        所以 对象中不存储 this 指针
         4. this 指针是 成员函数 第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传            递,不需要用户传递
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值