C++中的this指针

1.this指针的作用是什么?
this 指针是一个隐含于每一个非静态成员函数中的特殊指针。它指向正在被该成员函数操作的那个对象。当对一个对象调用成员函数时,编译器先将对象的地址赋给 this 指针,然后调用成员函数,每次成员函数存取数据成员时由隐含使用 this 指针。

2.为什么会有this指针?
第一、因为C++编译器G++是在GCC上优化而来,基本上是按照C语言的模式来编译程序,但C语言没有类等面向对象语言的特性,所以编译时将类当做 struct 类型;第二、C语言的函数都是全局的,而C++有成员函数,在编译C++程序时,也只能把类的非静态成员函数当成全局的函数对待,为了防止非当前类的其他对象调用,编译时添加了一个this常量指针,改指针为当前类类型,当对一个对象调用成员函数时,编译程序先将对象的地址赋给 this 指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含使用 this 指针。

#include <iostream>

class dog {
    int m_age;
    
public:
    void bark()
    {
        std::cout<<"~~~~~~~~~"<<std::endl;
    }
    
    //对象方法,等价于 void setAge(dog * const this,int age)
    void setAge(int age)
    {
        m_age = age;//等价于this->m_age = age
    }
    
    //静态方法,在类的作用域,编译完成后既有内存,由类名直接调用
    static void eatting()
    {
        std::cout<<"/---\\~~~~"<<std::endl;
    }
    
    static int sum;
    
};

int dog::sum = 10;

int main(int argc, const char * argv[]) {
    dog d;
    d.bark();
    d.setAge(10);
    dog::eatting();
    std::cout<<"sum = "<<dog::sum<<std::endl;
    
    return 0;
}

3.this指针的使用场景
为实现对象的链式引用;
为避免对同一对象进行赋值操作;
在实现一些数据结构时,如 list。

推荐阅读更多精彩内容

  • ES6 http://es6.ruanyifeng.com 目录 1 let 和 const 命令 2 变量的解构...
    常青1890阅读 5,033评论 0 41
  • 参考博客 简单说明一下this指针到底是什么 class是用户自定义的类型,我们都知道int *p是指向int类型...
    凉拌姨妈好吃阅读 45评论 0 0
  • 1.C和C++的区别?C++的特性?面向对象编程的好处? 答:c++在c的基础上增添类,C是一个结构化语言,它的重...
    杰伦哎呦哎呦阅读 3,291评论 0 37
  • 1.面向对象的程序设计思想是什么? 答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。 2.什么是类?...
    少帅yangjie阅读 970评论 0 10
  • 如今,学习方法越来越多,找到对自己有效的方法可能就要花费很多时间。发表在SAGE期刊平台的一篇新论文,列出了5种最...
    寻世良方Cc_Sandy拎0阅读 195评论 0 1