我正在阅读老师给我的一些代码,但我不太了解其中一行特定的代码。该函数返回一个int&。
return (*(Vector *)this)[i];
此return语句的运算符重载为“ []”。 []的另一个操作符重载在“ this”的基类中定义。基类是已定义的类“ Vector”。我不明白这行代码。
答案 0 :(得分:5)
如有疑问,请简化。
第一步:
return (*(Vector *)this)[i];
可以
Vector* ptr = (Vector*)this;
return (*ptr)[i];
第二步:
return (*ptr)[i];
可以
Vector& ref = *ptr;
return ref[i];
将这两种简化放在一起
return (*(Vector *)this)[i];
等同于
Vector* ptr = (Vector*)this;
Vector& ref = *ptr;
return ref[i];
当成员函数是const
成员函数时,this
的类型为Vector const* const
。
第一行删除了对象指针的const
性质。
第二行取消引用指针。
最后一行返回对象的第i
个元素。
答案 1 :(得分:0)
我不明白这行代码。
return (*(Vector *)this)[i];
假设T
是一种类型,T*
是“指向T
的指针”的类型。因此,假设Vector
是类型,则Vector*
是指向Vector
的指针。
this
是一个特殊名称,它是指向成员函数的对象参数的指针。
(T)expr
是显式类型转换。它对表达式执行静态强制转换,重新解释强制转换或const强制转换之一或组合,将值转换为类型T
。在表达式(Vector *)this
中,this
指针被转换为类型Vector*
。假设Vector
是基类,这是静态转换,更具体地说,是向上转换,因为我们在继承层次结构中进行转换。
*
中的一元运算符*expr
是间接运算符。它通过指针(在这种情况下)操作数进行间接操作,并导致指向对象的左值。因此,*(Vector *)this
将是类型Vector
的左值,它是this
的基类子对象。
expr[index]
是下标运算符。因此,(*(Vector *)this)[i]
调用this
对象上基类的下标运算符。
最后,return expr;
语句跳出该函数,并将表达式的值返回给调用者。因此,return (*(Vector *)this)[i];
返回基类的下标运算符的结果。