我正在尝试创建一个通用函数,该函数接受同一个类的两个对象并返回同一个对象

这是我的两个类: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:我正在尝试返回一个Point2D对象,其X,Y坐标是2个Point2D对象之间的差

对于Point3D:我试图返回一个Point3D对象,其X,Y,Z坐标是2个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; }


有人可以帮我吗谢谢

最佳答案

我认为您可以为每个类设置一个Diff函数。

对于Point2D类:

Point2d Diff(Point2D &d) {
    Point2d pt;
    pt.x = this->x - d.x;
    pt.y = this->y - d.y;
    return pt;
}


对于Point3D类:

Point3d Diff(Point3D &d) {
    Point3d pt;
    pt.x = this->x - d.x;
    pt.y = this->y - d.y;
    pt.z = this->z - d.z;
    return pt;
}


然后,您的函数是这样写的:

template T PointDiff(T pt1, T pt2) {
        return pt1.Diff(pt2);
}


我希望这能帮到您。

07-24 14:34