Ich habe eine abstrakte Klasse namens Form.Wie kann man einen Parameter eines abstrakten Datentyps haben?
class Shape{
public:
virtual const ColorRGB getColor() const;
virtual double rayIntersectionDistance(Ray r) = 0;
};
Und jetzt habe ich die folgenden Klassen von Form abgeleitet.
class Sphere: public Shape { //implementation goes here }
class Plane: public Shape { //implementation goes here }
ich beide getColor implementiert haben() und rayIntersectionDistance (Ray r) Methoden innerhalb der beiden Klassen, mit zusätzlichen Methoden spezifisch für diese Klassen.
So, jetzt in einer anderen Klasse, genannt Szene, ich habe ein render() Methode, und es Prototyp ist:
void render(int width, int height, Shape s);
Und das scheint zu nicht funktioniert, der Compiler beschwerde mich sagen:
error: cannot declare parameter 's' to be of abstract type 'Shape'
Wie kann ich dies geschehen lassen? Was wäre ein besserer Weg, dies zu erreichen?
'func4 (unique_ptr)', 'Fkt5 (Shared_ptr )', ... ;-) –
Barry
@barry fair zu sein, ein unique_ptr zu einem Unentschieden Funktion ungewöhnlich wäre bewegt vorbei. @Peter Ich würde wahrscheinlich 'func()' oder 'func2()' nicht ermutigen. viel zu nutzlos ... 'func3()' ist der eine. –
@Barry - ja. Es ist auch möglich, einen beliebigen Typ zu übergeben, der einen Zeiger oder einen Verweis auf 'Shape' enthält - einschließlich der intelligenten Zeigertypen, wie Sie es nennen -, solange dieser Typ seinen Status entsprechend verwaltet. – Peter