C++ 类和对象篇(二) this指针

目录

一、this指针概念 

二、this指针的特性

三、this指针存在哪里?

四、this指针可以为空吗? 

五、能在构造函数里使用this指针吗?


一、this指针概念 

1.是什么?

        它是类内非静态成员函数的隐含形参,this指针指向调用该函数的对象。

        this指针是C++编译器给每个“非静态的成员函数“默认传入的一个隐藏参数,this指针指向调用该成员函数的对象。


2.为什么要有this指针?

        如何让对象内的成员函数、成员变量,看到对象本身呢?——通过this指针:this是一个指针,它时时刻刻指向对象本身。


3.怎么用?

        this指针只能在一个类的成员函数中调用,它表示当前对象的地址。


二、this指针的特性

1. this指针的类型:类的类型* const,所以this指针被const修饰无法被修改


2. this指针是隐式的,只能在“成员函数”的内部使用


3. this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给this形参。 所以对象中不存储this指针,即this指针并不是对象本身的一部分,不会影响 sizeof(对象) 的结果。


4.成员函数实际都隐藏了一个this指针参数,这是编译器默认传递的,不需要我们传递。

eg.实际上的成员函数和成员函数的调用。

C++ 类和对象篇(二) this指针_第1张图片​​

eg.this指针由编译器传递。


三、this指针存在哪里?

this指针和其他形参一样一般存在栈上。它不在对象里,故计算类的大小时没有计算this指针。


四、this指针可以为空吗? 

可以,如:使用nullptr实例化一个对象时,this指针就为空,指向空的地址。

但这样就无法使用this指针调用类内成员,因为this指针指向空的地址,强行调用类内成员会报错。


五、能在构造函数里使用this指针吗? 

为什么会问这个问题?

        因为使用构造函数时是在构造对象,开辟空间;而this指针指向对象的空间,这就有了谁先谁后的问题,如果是this指针先获取对象空间,此时对象还未构造,就会出错。


可以的,可简单的记忆:构造函数也成员函数,故可以使用。

因为在构造函数分两步:1.构造对象,开辟空间;2.进入函数体后:赋值。所以在构造函数使用this指针时空间已经开辟好了空间,所以能在构造函数里使用this指针。

你可能感兴趣的:(C++,c++)