zoukankan      html  css  js  c++  java
  • C++ this指针理解

    1. this指针的用处:
    一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。----请细品以下概念
    this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。
    2. this指针的使用:
    一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;另外一种情况是当参数与成员变量名相同时,如this->n = n (不能写成n = n)。 
    3. this指针程序示例:
    this指针是存在与类的成员函数中,指向被调用函数所在的类实例的地址。

     1.当形参和成员变量同名时,可以用this指针来区别

     1 class Data
     2 {
     3 public:
     4     int num;
     5     
     6     //形参和成员名相同
     7     void setNum(int num)
     8     {
     9         //形参num
    10         //成员num this->num
    11         //num = num;//就近原则 形参num赋值给形参num
    12         this->num = num;
    13         //将形参num赋值给对象中成员num
    14     }
    15 }

    2.在类的普通成员函数中返回对象本身(*this)(很重要)

     1 #include <iostream>
     2 using namespace std;
     3  
     4 class A
     5 {
     6 public:
     7     int get() const{return i;}
     8     void set(int x){this->i=x;cout<<"this指针保存的内存地址为:"<<this<<endl;}
     9 private:
    10     int i;
    11 };
    12  
    13 int main()
    14 {
    15     A a;
    16     a.set(9);
    17     cout<<"对象a所在的内存地址为:"<<&a<<endl;
    18     cout<<"对象a所保存的值为:"<<a.get()<<endl;
    19     cout<<endl;
    20     A b;
    21     b.set(999);
    22     cout<<"对象b所在的内存地址为:"<<&b<<endl;
    23     cout<<"对象b所保存的值为:"<<b.get()<<endl;
    24     return 0;
    25 }

     总结:通过这个输出结果,我们可以看到,对象a的内存地址和this指针的一模一样(都是0017F7E8);而当运行到对象b的时候,它的内存地址又和它所对应的this指针指向的内存地址一模一样了(都是0017F7DC)。这就说明了this指针变量记录的是当前对象的内存地址,即this指针指向当前的对象!我们可以看到this指针最大的作用就是它保存了当前对象的地址,并且应用指针的形式指向了当前的对象。

  • 相关阅读:
    vim复制
    嵌入式Linux学习(二)
    (Java实现) 洛谷 P1042 乒乓球
    (Java实现) 洛谷 P1042 乒乓球
    (Java实现) 洛谷 P1071 潜伏者
    (Java实现) 洛谷 P1071 潜伏者
    (Java实现) 洛谷 P1025 数的划分
    (Java实现)洛谷 P1093 奖学金
    (Java实现)洛谷 P1093 奖学金
    Java实现 洛谷 P1064 金明的预算方案
  • 原文地址:https://www.cnblogs.com/loliconinvincible/p/12527954.html
Copyright © 2011-2022 走看看