关于java:为什么在c ++中使用this-> ObjectName而不是this.ObjectName

Why use this->ObjectName instead of this.ObjectName in c++

本问题已经有最佳答案,请猛点这里访问。

你好,我想知道为什么我的世界,我们在C + +对象使用instead of the this→this.objectname when to an referring对象在C + +。This is using the这个简单的表对象:→P></

1
2
3
4
     int x = 34;
     void take(int x) {
      this->x = x;
     }

但在其他编程语言Java类,我们使用:P></

1
2
3
4
     int x = 34;
     void take(int x) {
      this.x = x;
     }

为什么我知道什么是this statement is asking does the C++中的this statement from the Java有什么区别P></


这只适用于指针。类/结构类型(包含引用)的表达式使用更熟悉的点表示法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Whatever {
 public:
  int x;
  void take(int n);
};

class T {
  public:
   int x;
};

void Whatever::take(int n) {
  T t;
  T *pt = &t; // pointer
  T &tr = t;  // reference is basically just an alias

  pt->x   = n;
  (*pt).x = n; // can dereference a pointer, then use like a reference
  tr.x    = n;

  // Same for this.
  this->x   = n;
  (*this).x = n;
}

对你来说奇怪的是,EDCOX1 2是一个C++中的指针,而不是一个引用。

另请参见:为什么"this"是指针而不是引用?(stroustrup在用该语言创建引用之前介绍了this。)


Java/C#中,几乎所有东西都是引用类型(除了原始类型、C中的结构等)。但是在C++中,使用EDCOX1×5和EDCOX1×6的语义。使用

1
2
3
4
5
6
Myclass{
 public: void foo(){}
};

Myclass ob; //as value
ob.foo();

1
2
Myclass * ob; //as pointer
ob->foo();

注意:除了指针之外,在EDCOX1的7引用中还有另一种引用方式,这是引用本身,但是在C++中,引用被用作对象的别名,所以它类似于值类型(如Java/Cβ)。

1
2
3
 Myclass ob; //as value
 Myclass& ref=ob; // reference to ob
 ref.foo();


在C++中,你有指针。使用指针->。对于引用/对象,使用.