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寄存器自动传 递,不需要用户传递