C++ this指针

深藏阁楼爱情的钟 2023-03-01 11:59 90阅读 0赞

成员函数没有使用const修饰,this的指向m_A是可以修改的 ,每个表达式都隐含了一个this指针。

  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4. //常函数
  5. class Person{
  6. public:
  7. // this指针的本质 是指针常量 指针的指向是不可以修改的
  8. void showPerson() {
  9. this->m_A = 100;
  10. // this = NULL; //this指针不可以修改指针的指向的
  11. }
  12. int m_A;
  13. };
  14. void test01() {
  15. Person p;
  16. p.showPerson();
  17. }
  18. int main() {
  19. test01();
  20. system("pause");
  21. }

想要不允许修改只需要加一个const修饰,变成一个常函数

20200725084307892.png

20200725084332290.png

这里本身this代表的是谁来调用我就代表谁,这里的p调用了showPerson() 所以这里this指向的是p。那我可不可以将这个this不指向p,指向NULL可不可以?我们来验证下

20200725084555152.png

这里你会不会怀疑是const的原因,这里this本身就是一个指针常量,是不可以修改的,不加const这个this的指向也是不可以修改的,这里this指向的是p代表的是p,p的值是可以修改的 ,this的指向不可以修改。

20200725084952912.png

这里是this相当于是Person * const this;这个this是被const修饰的所以this是不可以修改的

20200725085112314.png

我们想要this指针指向的值也不可以修改 // const Person * const this; //在成员函数后面加const,修饰的是this指向,让指针指向的值也不可以修改

20200725085634881.png

现在我们有个新的需求:int m_B; //特殊变量,即使在常函数中,也可以修改这个值

20200725090239787.png

目前还是不能达到要求:只需要加一个关键字mutable修饰m_B变量

20200725090533845.png

讲到这里关于常函数讲完了,接着上面的,下面我们讲一下什么是常对象 ?const Person p;这就是常对象

  1. //常对象
  2. void test02(){
  3. const Person p; //在对象前加const,变为常对象
  4. }

20200725091304657.png

但是对于这个mutable修饰的变量m_B是可以修改的

20200725091456851.png

还有一个知识点: 常对象只能调用常函数。原因:常对象不可以调用普通成员函数,因为普通成员函数可以修改属性

const修饰目的就是被允许修改,如果可以调用普通成员函数,要是在普通成员函数修改对象的属性是不被允许的。

20200725091738786.png

发表评论

表情:
评论列表 (有 0 条评论,90人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C++ this指针

    this 是 C++ 中的一个关键字,也是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员。 所谓当前对象,是指正在使用的对象。例如对于stu.sho

    相关 c++笔记----this指针

    this指针 1. this是一个特殊的指针 1. 指向调用该成员函数的那个对象。 2. 是一个隐含每一个非静态成员函数的特殊指针。 1. 对象调

    相关 C++ this 指针

    C++ this 指针 在 C++ 中,每一个对象都能通过 `this` 指针来访问自己的地址。`this` 指针是所有成员函数的隐含参数。在成员函数内部,它可以用来指向

    相关 C++ this 指针 浅析

    【摘要】 本文分三部分。第一部分this指针的的产生原因,即为了让不同对象调用同一函数时,通过this指针来对不同对象的地址加以区别实现函数共用。第二部分讲述this指针的使

    相关 c++ this 指针

    1. this指针的用处:   一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非

    相关 C++之this指针

    在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。 友元函数没有 th

    相关 C++——this指针

     一 this指针的使用(成员函数中) 当通过一个对象调用成员函数时,编译器会把当前对象的地址传递给this指针;(this指针保存的是当前对象的地址) //thi