0

同じクラスの 2 つのオブジェクトを受け取り、同じオブジェクトを返す汎用関数を作成しようとしています。

これは私の2つのクラスです:Point2DPoint3D

class Point2D
{
 public:
           Point2D();
           Point2D(int,int);

           int getX() const;
           int getY() const;

           void setX(int);
           void setY(int);

 protected:

             int x;
             int y;
};



class Point3D:public Point2D
{
  public:   Point3D();
            Point3D(int,int,int);

            void setZ(int);

            int getZ() const;

  protected:
             int z;
};

Point2D の場合: X、Y 座標が 2 つの Point2D オブジェクトの差である Point2D オブジェクトを返そうとしています。

Point3D の場合: X、Y、Z 座標が 2 つの Point3D オブジェクトの差である Point3D オブジェクトを返そうとしています。

これらの両方を処理する汎用関数を作成できますか??? .

以下は私がこれまでに持っているものですが、Point2Dオブジェクトのみを処理します.Point3Dオブジェクトを以下の汎用関数に統合するにはどうすればよいですか

テンプレート T PointDiff(T pt1, T pt2)
{
T pt3;

pt3.x = pt1.x - pt2.x;

pt3.y = pt1.y - pt2.y;

pt3 を返します。
}

私はこのようなことを考えていましたが、問題はPoint2DオブジェクトにZ座標がないことです

テンプレート T PointDiff(T pt1, T pt2) {
T pt3;

pt3.x = pt1.x - pt2.x;

pt3.y = pt1.y - pt2.y;

pt3.z = pt1.z - pt2.z

pt3 を返します。}

誰かが私を助けてくれませんか

4

2 に答える 2

0

各クラスのマイナス演算子をオーバーライドできます。

Point2D operator-(Point2D &pt1, Point2D &pt2)
{
    Point2D ret;

    ret.x = pt1.x - pt2.x;
    ret.y = pt2.y - pt2.y;

    return ret;
}

Point3D operator-(Point3D &pt1, Point3D &pt2)
{
    Point3D ret;

    ret.x = pt1.x - pt2.x;
    ret.y = pt2.y - pt2.y;
    ret.z = pt1.z - pt2.z;

    return ret;
}

operator-また、両方のクラスのフレンドとして宣言する必要があります。

class Point2D
{
public:
    Point2D();
    Point2D(int,int);

    int getX() const;
    int getY() const;

    void setX(int);
    void setY(int);

    friend Point2D operator-(Point2D &pt1, Point2D &pt2);
protected:

    int x;
    int y;
};

class Point3D:public Point2D
{
public:
    Point3D();
    Point3D(int,int,int);

    void setZ(int);

    int getZ() const;

    friend Point3D operator-(Point3D &pt1, Point3D &pt2);
protected:
    int z;
};

減算を使用するだけで、これをプログラムで使用できます

int main(int argc, char **argv)
{
    Point2D a, b, c;

    a.setX(4);
    a.setY(5);
    b.setX(2);
    b.setY(-10);

    c = a - b;

    std::cout << c.getX() << " " << c.getY() << std::endl;
}
于 2013-11-15T18:39:41.793 に答える