【c++】this指针

简介: 【c++】this指针

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

面试题:

  1. this指针存在哪里?
  2. this指针可以为空吗?

C++中this指针存储的位置 && this是否可以是nullptr_this指针存放在哪里-CSDN博客



相关文章
|
6天前
|
C++ 数据格式
LabVIEW传递接收C/C++DLL指针
LabVIEW传递接收C/C++DLL指针
16 1
|
1天前
|
C++
C++程序返回指针值的函数
C++程序返回指针值的函数
10 1
|
1天前
|
存储 C++
C++程序数组与指针:深入理解与实践
C++程序数组与指针:深入理解与实践
9 1
|
1天前
|
存储 C++
C++程序指针变量:深入理解与实践
C++程序指针变量:深入理解与实践
7 1
|
1天前
|
存储 C++
C++程序中的对象指针
C++程序中的对象指针
7 1
|
1天前
|
存储 C++
C++程序中的函数与指针
C++程序中的函数与指针
6 1
|
1天前
|
存储 C++
C++程序中的字符串与指针
C++程序中的字符串与指针
8 2
|
6天前
|
编译器 C++
C/C++杂谈——指针常量、常量指针
C/C++杂谈——指针常量、常量指针
9 0
|
6天前
|
C++ 编译器
|
6天前
|
存储 安全 程序员
C++:智能指针
C++:智能指针
22 5