【发布时间】:2017-03-21 10:33:01
【问题描述】:
我的问题如下,假设我有这些课程:
class ID3OBJ
{
public:
const double X;
const double Y;
const double Z;
ID3OBJ(double x, double y, double z);
ID3OBJ();
const ID3OBJ operator+ (const ID3OBJ param) const;
}
class Vector : public ID3OBJ
{
public:
Vector(double x, double y, double z);
Vector();
/*const Vector const operator+ (const Vector param); */
}
class Point : public ID3OBJ
{
public:
Point(double x, double y, double z);
Point();
}
class Plane : public ID3OBJ
{
public:
Point Origin;
Vector Direction1;
Vector Direction2;
Vector NormalVector;
Plane(Point Origin, Vector Normalvector);
Plane(Point Origin, Vector Direction1, Vector Direction2);
Plane();
}
class D3GON : public ID3OBJ, public Plane
{
public:
std::vector<Point> EdgePoints;
D3GON(Point P1, Point P2, Point P3);
};
在我当前的代码中,我必须为每个类重新定义运算符重载,如何避免这种代码重复?
我必须添加转换函数吗?
我使用 const 成员值来拒绝对象在创建后发生更改。这意味着如果必须更改任何低级对象,则必须将其替换为新对象。请参阅下面的运算符重载:
// operator overwrites:
const ID3OBJ ID3OBJ::operator+ (const ID3OBJ param) const { double newX, newY, newZ; newX = X + param.X; newY = Y + param.Y; newZ = Z + param.Z; return ID3OBJ(newX, newY, newZ); }
谢谢你:)
【问题讨论】:
-
如果所有
countableObjectsInterface都以相同的方式添加,则只需提供该方式,而不提供Animals operator+(Animals obj)。如果Animals和Sloths添加不同,您将不得不提供不同的实现,无法绕过它。也许添加 2 个Sloths来创建更多Sloths根本不是正确的做法。 -
@n.m.:嗯,他们必须吃东西,虽然我听说他们更喜欢生菜。
-
这是一个例子,我正在使用 3D 对象。如果我不为我的子类提供任何重载,则运算符会返回基类。我将添加运算符定义。
-
请发布一个真实的例子。答案很大程度上取决于您尝试做什么的确切细节。
-
@n.m.见上文
标签: c++ operator-overloading code-duplication