Bei folgenden Klassen:korrekt Umsetzung Vererbung
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;
};
So jede Geometrie bekam eine Form des Typs Rectangle
oder Circle
. In meinem Programm muss ich den (euklidischen) Abstand zwischen zwei Geometrien berechnen. Somit gegeben zwei Geometrien g1
und g2
Ich nenne
g1.distanceBetweenGeometries(g2);
und ich möchte den Abstand zwischen g1.myShape
und g2.myShape
zurückzukehren.
Ich weiß bereits, wie man den Abstand zwischen zwei Rechtecken, zwei Kreisen oder zwischen einem Rechteck und einem Kreis berechnet. Irgendwie habe ich keine objektorientierte Lösung zur Implementierung der Distanzfunktion erreicht.
Meine Idee ist: Rufen Sie die Abstand-Funktion von einer gegebenen Geometrie. Diese Abstandsfunktion ruft die Abstandsfunktion einer Form auf. In Shape::distance(..)
muss ich irgendwie unterscheiden, welcher Typ s1
und s2
sind. Danach muss ich die richtige mathematische Formel wählen, um den Abstand zwischen ihnen zu berechnen. Kannst du mir sagen, ob meine Vererbungsidee hier ausreichend ist und wie man die Shape::distance(..)
Funktion implementiert, damit sie automatisch bestimmen kann, welche Formel für die Entfernungsberechnung benötigt wird?
C++ hat keine native * * mehrere Versand, haben Sie Ihre eigene zu implementieren. – Jarod42
Wenn Sie eine 'Shape' speichern, verlieren Sie alle zusätzlichen Informationen von' Rectangle' oder 'Circle', so dass Sie nicht auf Informationen wie' length' oder 'width' zugreifen können nicht in der Lage sein, die gewünschte Entfernung zu berechnen. – Holt
Könnten Sie mir sagen, was 'Geometry' anstelle von' Shape' speichern soll? – Kapa11