【发布时间】:2014-03-22 08:30:27
【问题描述】:
我是计算机科学专业的学生。请在回答之前完整阅读我的问题
今天在 C++ 课上,我们学习了重载运算符,尤其是赋值运算符,我的教授说了一些他不喜欢的话:“相信我。”他说出这句话时提到了return *this 约定。
我问,“但是为什么?”他的回答几乎是,“因为它是。”
我对这个答案不满意。
考虑以下几点:
class length
{
private:
int inches, feet, yards;
public:
//getters, setters, etc.
Length operator=(const Length& Q)
{
this->inches = Q.inches;
this->feet = Q.feet;
this->yards = Q.yards;
return *this;
}
};
我通过无数问题和至少 3 本 C++ 书籍胡乱理解,“约定”之所以存在是因为它允许链式分配,但为什么需要以及如何是吗?
一个更深入的问题是this 如何对类的属性(IE this->inches)有单独的“子指针”(我的术语,不是官方的)?这是如何运作的? this->inches 只是一个偏移量还是什么?
我的教授和我真的很感激一个不仅仅是“因为它是如何完成的”的答案。
请,谢谢
编辑:我以为我写的问题很清楚;但是,根据我收到的回复,我认为存在误传。我正在寻求了解约定的来源(我相信源于 C)以及为什么会这样。
【问题讨论】:
-
@MartinJ。 - 很好的发现,但对于其他投票结束的人,请查看已接受的答案。然后考虑投反对票,投一个正确的票。
-
如果你的教授不能给出比“因为它是这样完成的”更好的答案,你应该找一位新教授。
-
我个人的看法是,返回一个指针在技术上是正确的做法,但这太“C”了。必须像其他流行语言一样,尽量隐藏指针的存在。
-
@JoshuaClayton:那个'C'是什么样的?当您在 C 中从一个变量到另一个变量时,表达式的类型不是指针(当然,除非您分配给 的东西是 指针)。
-
一个赋值只需要两个操作数。对象和单个参数实现了这一点。返回指针将与此引用一样有效。返回 void 对我来说更有意义。
标签: c++ operator-overloading this