美文网首页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++中的this指针

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