gpt4 book ai didi

c++ - 正确实现继承

转载 作者:太空狗 更新时间:2023-10-29 21:36:17 28 4
gpt4 key购买 nike

给定以下类(class):

class Geometry {
public:
double distanceBetweenGeometries(const Geometry& g);
private:
Shape myShape;
};

class Shape {
public:
double distance(const Shape& s1, const Shape& s2);
};

class Rectangle : public Shape {
private:
double i,j,length,width;
};

class Circle : public Shape {
private:
double i,j,radius;
};

所以每个几何体都有一个 RectangleCircle 类型的形状。在我的程序中,我需要计算两个几何之间的(欧几里德)距离。因此,给定两个几何 g1g2 我调用

g1.distanceBetweenGeometries(g2);

我想返回 g1.myShapeg2.myShape 之间的距离。

我已经知道如何计算两个矩形、两个圆之间或一个矩形与一个圆之间的距离。不知何故,我没有实现用于实现距离函数的面向对象的解决方案。

我的想法是:从给定的几何体调用距离函数。此距离函数称为形状的距离函数。在 Shape::distance(..) 中,我需要以某种方式区分 s1s2 是哪种类型。之后,我必须选择正确的数学公式来计算它们之间的距离。你能告诉我我的继承想法在这里是否足够,以及如何实现 Shape::distance(..) 函数,以便它可以自动确定请求哪个公式进行距离计算?

最佳答案

你可以这样做:

class Circle;
class Rectangle;

// Your existing methods to do the real computation:
double distanceRC(const Rectangle&, const Circle&);
double distanceRR(const Rectangle&, const Rectangle&);
double distanceCC(const Circle&, const Circle&);

class Shape {
public:
virtual ~Shape() = default;
virtual double distanceWith(const Shape&) const = 0;
virtual double distanceWith(const Rectangle&) const = 0;
virtual double distanceWith(const Circle&) const = 0;
};

class Rectangle : public Shape {
public:
double distanceWith(const Shape& s) const override { return s.distanceWith(*this); }
double distanceWith(const Rectangle& r) const override { return distanceRR(*this, r);}
double distanceWith(const Circle& c) const override { return distanceRC(*this, c); }
private:
double i,j,length,width;
};

class Circle : public Shape {
public:
double distanceWith(const Shape& s) const override { return s.distanceWith(*this); }
double distanceWith(const Rectangle& r) const override { return distanceRC(r, *this);}
double distanceWith(const Circle& c) const override { return distanceCC(*this, c); }
private:
double i,j,radius;
};

关于c++ - 正确实现继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41061514/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com