私はいくつかのコードを調べていますが、このクラス ヘッダー ファイルでフレンド オペレーターが何をしているのか疑問に思っていました。
これは、「この演算子を使用していて、両方の入力が CSegment3D 型である場合、関数の実装で定義された方法で操作する」と言うだけでよいのでしょうか?
class CSegment3D : public CObject
{
public:
CSegment3D& operator*=(const double& factor);// multiply by a scalar factor & assign
CSegment3D& operator/=(const double& factor);// divide by a scalar factor & assign
CSegment3D& operator+=(const CSegment3D& other);// vector addition
CSegment3D& operator-=(const CSegment3D& other);// vector subtraction
friend CSegment3D GetMidpoint(const CSegment3D& ptA, const CSegment3D& ptB);
friend CSegment3D GetNormal( CSegment3D *pSeg1, CSegment3D *pSeg2, CSegment3D *pSeg3 ); // Return a point normal to the surface defines by the tree point passed in.
friend double operator*(const CSegment3D& vectorA, const CSegment3D& vectorB); // dot product
friend CSegment3D operator*(const double& factor, const CSegment3D& vectorA); // multiply by a scalar
friend CSegment3D operator/(const CSegment3D& vectorA, const double& factor); // divide by a scalar
friend CSegment3D operator+(const CSegment3D& vectorA, const CSegment3D& vectorB);// vector addition
friend CSegment3D operator-(const CSegment3D& vectorA, const CSegment3D& vectorB );// vector subtraction
friend CSegment3D operator^(const CSegment3D& vectorA, const CSegment3D& vectorB); // cross product
friend CSegment3D operator%(CSegment3D vectorA, const CSegment3D& vectorB); // projection of vectorB onto vectorA
};