c++this指针

如果同一个类定义了n个对象,则有n个同样大小的空间以存放n个对象中的数据成员,但是不同的对象都调用同一个函数的目标代码。那么当不同对象的成员函数引用数据成员时,怎么能保证引用的是所指定的对象的成员呢?
让我们来看看this 吧
      作用:在每个成员函数中都包含一个特殊的指针,这个指针的名字是固定的,称为this,它是指向本类对象的指针,它的值是当前被调用的成员函数所在的对象的起始地址。
例如:
class CDate
{
public:
void SetDate(int iYear=1990, int iMonth = 1, int iDay = 1)
{
_iYear = iYear;
_iMonth = iMonth;
_iDay = iDay;
}
private:
int _iYear;
int _iMonth;
public:
int _iDay;
};
系统会进行成员函数改写:


class CDate
{
public:
void SetDate(CDate * const this  int iYear=1990, int iMonth = 1, int iDay = 1)
{
_iYear = iYear;
_iMonth = iMonth;
_iDay = iDay;
}
private:
int _iYear;
int _iMonth;
public:
int _iDay;
};
如果定义了3个同类对象 a,b,c 当调用成员函数a.CTest时编译系统就把a的起始地址赋给给this于是在成员函数引用数据成员时,就按照this 的指向找到对象a的数据成员。
注意:这些都是编译系统自己实现的,编程者不必人为的增加this指针,也不必将对象a的地址传给this指针。这样改写只是为了方便理解。


class CDate
{
public:
void SetDate(CDate * const this  int iYear=1990, int iMonth = 1, int iDay = 1)
{
this->_iYear = iYear;
this->_iMonth = iMonth;
this->_iDay = iDay;
}
}
注意:可以用*this表示被调用函数所在的对象可以用(*this)._iYear访问括号不能省略.的优先级别高于*。
特性:(1)this 类型:类类型 * const。
          (2)this指针是类成员函数的第一个默认隐含参数,编译器自动维护传递。
          (3)this指针并不是对象的一部分,不影响sizeof的结果。
          (4)只有在类的非静态成员函数中才可以使用this指针,其它任何函数都不可以。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值