【发布时间】:2019-09-27 20:34:31
【问题描述】:
我正在阅读我的老师给我的一些代码,但我不太理解某一行特定的代码。该函数返回一个 int&。
return (*(Vector *)this)[i];
此返回语句位于“[]”的运算符重载中。在“this”的基类中还定义了另一个 [] 运算符重载。基类是定义的类“Vector”。我不明白这行代码。
【问题讨论】:
-
1) 类型对话 const 指针 @this 到 Vector* 2) 取消引用指针 3) 通过 int& operator[](int indx) 获取它的值
-
首先将
this转换为Vector*- 完全合法的操作,因为该类派生自 Vector。然后通过 * 操作符取消引用,最后应用 Vector 的 [] 操作符。 -
一个更好的方法,应该更容易理解是
return static_cast<Vector&>(*this)[i];。它清楚地表明您希望*this被视为Vector&并且您为此调用[]。 -
告诉你的老师停止使用 C 风格的演员表。
-
如果派生版本所做的只是调用基本版本,那么根本没有理由重新定义它。该行与
this->Vector::operator[](i)基本相同(除了这个版本是类型安全的),它只是选择operator[]的显式版本并调用它
标签: c++ class inheritance