我正在学习C ++ OOP。我理解函数和指针(或者至少我是这么认为的),但现在我正在阅读一个名为“Student”的C ++类的例子,我发现了以下内容:
void Student::modify_mark(double mark)
{
this->mark = mark;
}
我知道这个>标记等同于(* this).mark,但我真的不明白为什么在这种情况下我们需要一个指针。为什么不这个。马克?我们想修改学生的标记,对吗?
答案 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
保留关键字是指向当前类实例的指针,因此,因为它是指针,所以必须使用->