为什么this->属性而不是this.attribute(C ++ OOP)?

时间:2016-02-24 00:12:20

标签: c++ oop

我正在学习C ++ OOP。我理解函数和指针(或者至少我是这么认为的),但现在我正在阅读一个名为“Student”的C ++类的例子,我发现了以下内容:

    void Student::modify_mark(double mark)
    {
      this->mark = mark;
    }

我知道这个>标记等同于(* this).mark,但我真的不明白为什么在这种情况下我们需要一个指针。为什么不这个。马克?我们想修改学生的标记,对吗?

3 个答案:

答案 0 :(得分:2)

简短的回答是:因为。

在C ++中,this是一个指针。它一直是指针。就是这样。熊熊,蜜蜂,Spock光束,在C ++中this是一个指针。

它可能是一个参考吗?当然,我不能立即看到任何技术原因。但是,当C ++成为Stroustrup心中的梦想时,他梦想this成为一个指针。如果,幸运的话,你曾遇到过他,你可能想问他这个问题。您可能会得到一个引人入胜的答案,如果是这样的话,请在发生这种情况时与我们分享。

但是,因为this是一个从头开始的指针,所以永远是一个指针,直到宇宙的热死亡。

答案 1 :(得分:0)

因为this是指针。

如CPP参考文献所述:

  

关键字this是一个prvalue表达式,其值是地址   调用成员函数的对象。它可以   出现在以下上下文中:1)在任何非静态的体内   成员函数,包括成员初始化列表2)   声明非静态成员函数之后的任何地方   (可选)cv-qualifier序列,包括动态异常   规范(不建议使用),noexcept规范(C ++ 11)和   在默认成员初始值设定项中的尾随返回类型(自C ++ 11)3)   (自C ++ 11起)

     

类X的成员函数中的类型是X *(指向X的指针)。   如果成员函数是cv-qualified,则其类型为cv X *   (指向相同的cv限定X的指针)。自建设者和   析构函数不能被cv限定,其中的类型总是如此   X *,即使在构造或销毁const对象时也是如此。

     

在任何上下文中使用非静态类成员时   允许使用this关键字(非静态成员函数体,成员   初始化列表,默认成员初始化者),隐含的这个 - >   在名称之前自动添加,从而导致成员访问   表达式(如果成员是虚拟成员函数,则结果   在虚拟函数调用中)。

     

在类模板中,这是一个依赖表达式,并且是显式的   这 - >可能会被用来迫使另一个表达变得依赖。

     

如果程序可以保证,可以执行delete this;   该对象是由new分配的,但是,这会渲染每一个   指向解除分配对象的指针无效,包括this指针   本身:删除后;返回,这样的成员函数不能引用   到一个类的成员(因为这涉及一个隐式的解引用   这个)并没有其他成员函数可以被调用。这用于   例如,在控制块的成员函数中   std :: shared_ptr负责递减引用计数,何时   对托管对象的最后一次引用超出了范围。

答案 2 :(得分:-1)

在C ++中,this保留关键字是指向当前类实例的指针,因此,因为它是指针,所以必须使用->