我從頁面下面的清單:該運算符重載函數返回什麼?
#include "vector.h"
// An axis-aligned bounding box
class AABB
{
public:
VECTOR P; //position
VECTOR E; //x,y,z extents
AABB(const VECTOR& p, const VECTOR& e): P(p) ,E(e) {}
// ...
const SCALAR min(long i) const
{
return ((AABB*)this)->P[i] - ((AABB*)this)->E[i];
}
// ...
};
現在我不明白的是,什麼是MIN()用long值進行訪問。 我看着vector.h
,結果發現,方括號運算符重載:
class VECTOR
{
public:
SCALAR x,y,z; //x,y,z coordinates
//...
//index a component
//NOTE: returning a reference allows
//you to assign the indexed element
SCALAR& operator [] (const long i)
{
return *((&x) + i);
}
//...
};
後來它被用作:
// each axis
for(long i=0 ; i<3 ; i++)
{
if(A.max(i)<B.min(i) && v[i]<0)
{
那麼,爲什麼x
值參考由i
會增加嗎?
如果這個問題很荒唐容易,請耐心等待,我還是個菜鳥。如果這還不夠信息,我可以提供實際來源
'(AABB *)this'? '(&x)+ i'?什麼......遠離這個代碼。 – GManNickG
是的,我的反應是一樣的:) –
這個代碼(這是一個很好的做錯事情的例子)正在努力地以數組的形式訪問標量值(即_x_,_y_,_z_)。特別是'operator [](const long i)'使用x('&x')的地址和索引('i')來查找相應元素的內存地址,並返回它的值。 – radical7