2013-11-15 63 views
0

我试图创建一个通用的功能,这需要在同一类的两个对象的通用功能,并返回相同的对象为两个不同的类

这是我的两个类: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之间的差异对象

对于三维点:我想返回一个三维点对象,其X,Y,Z坐标是differenc es之间2个Point3D对象

我可以创建一个通用函数来处理这两个? 。

下面是我有这么远,但它只能处理Point2D对象,我怎么三维点对象集成到通用功能如下

型板T PointDiff(T PT1,T PT2)
{
T pt3;

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

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

return 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; }

有人可以请帮我谢谢

+0

搜索模板专业化。 iirc(很长一段时间没有编写C++),你可以对某些类型参数有一个明确的专门化。然而,我只是想知道为什么你想在这里使用模板方法?... –

+0

哈哈它的一个功课问题,因此必须这样做 – Computernerd

回答

2

我想你可以设置一个DIFF功能为每个类。

类的Point2D与:

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

和类三维点:

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); 
} 

我希望这将有助于您。

+0

**为每个类**设置一个Diff函数,是否意味着我添加了Diff函数的类? – Computernerd

+0

是的,您将Diff函数添加到类Point2D和Point3D。 – yanchong

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; 
} 
相关问题