美文网首页C++
C++中的this指针

C++中的this指针

作者: 黑夜no烟丝 | 来源:发表于2019-02-05 07:09 被阅读12次

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。

相关文章

  • [C++之旅] 16 对象指针/对象成员指针/this指针

    [C++之旅] 16 对象指针/对象成员指针/this指针 一、对象指针 对象指针指向堆中地址 对象指针指向栈中地...

  • C++基础

    C++ 值传递、指针传递、引用传递详解C++中引用传递与指针传递区别 引用传递和指针传递的区别 引用的规则:(1)...

  • 指针和引用的区别

    参照lyd_253261362的专栏的文章详细介绍=====c++中的引用与指针的区别 c++中的引用与指针的区别...

  • java中的引用与c++中的指针的区别

    java中的引用与c++中的指针的区别 Java的引用和C++的指针都是指向一块内存地址的,通过引用或指针来完成对...

  • 学习笔记3(指针运算,函数参数与指针,数组指针,二级指针)

    一、指针运算 二、数组与指针 三、指针和函数参数 java中: C/C++中: 四、指针数组 五、 二级指针 六、...

  • C++知识点

    C++基本方法: C++ memcpy C++基本特性: C++引用(vs指针) C++指针 C++封装: 将...

  • JNI总结

    java调用c/c++ 在C中:JNIEnv 结构体指针别名env二级指针 在C++中:JNIEnv 是一个结构体...

  • java

    1.java白皮书的关键术语 简单的参照c++,是c++语法的纯净版本但没有c++中的头文件,指针运算(甚至指针语...

  • 1.2.08_C++ this 指针

    C++ 类 & 对象 在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员...

  • 指针和引用的辨析

    先来看两个图 指针与引用的区别 1.指针在C和C++中均有,而引用是C++独有的特性(*指针申明符号,&引用申明符...

网友评论

    本文标题:C++中的this指针

    本文链接:https://www.haomeiwen.com/subject/xegmsqtx.html