Adapter für integer nach float
-
Hallo alle zusammen,
ich würde gerne einen Adapter für int Variablen schreiben. Ziel ist es die int an float anzupassen um dann nach einer Addition / Multiplikation eine float als ergebnis zu erhalten.
An sich weiß ich was ich machen soll, leider wird in allen Beispielen mit eigenen Klassen gearbeitet, nicht mit nativen Datentype.Java verwendet da die Klasse Integer.
Meine Frage ist
1. Gibt es eine Klasse Integer (wie in Java) von der ich erben kann?
2. Wenn es keine gibt, dann müsste ich eine Eigene schreiben welche ein int enthält (Kapselung), verstieße dies aber nicht gegen das Design Pattern wo steht:So können wir einerseits die Funktionalität von AlreadyImplementedCircle nutzen und behalten aber andererseits unsere Vererbungsstruktur mit ihrem polymorphen Verhalten bei.
nep
Design Patternhttp://www.c-plusplus.net/forum/viewtopic-var-t-is-155350.html
Ich danke für eure Antworten.
Gruß
-
Croatiancow schrieb:
ich würde gerne einen Adapter für int Variablen schreiben. Ziel ist es die int an float anzupassen um dann nach einer Addition / Multiplikation eine float als ergebnis zu erhalten.
Ich verstehe den Sinn nicht (Und nein, es gibt keine Integer-Klasse im C++ Standard). Vielleicht kannst du ein Beispiel nennen wo du dies benötigst (Den das Ergebnis einer int Addition/Multiplikation lässt sich ohnehin einem float zuweisen, wenn der Wertebereich nicht ausreicht, musst du vorher die Einzelwerte in float konvertieren.
-
Hallo asc,
das ich direkt int an float zuweisen kann ist mir bekannt. Ich soll das halt als Adapter lösen. Ist so eine typische Aufgabe wo es keinen Sinn macht, aber bewiesen werden soll das ich das Design Pattern Adapter verstanden hab.

Ein Beispiel hab ich leider nicht (ausser in SamllTalk).
Ach ja, native Datentypen sind laut meinem Prof. nicht 100% OO. Deswegen macht er das in SmallTalk, wo selbst int eine Klasse für sich ist und von Number erbt.
Wenn ich das richtig verstanden habe soll ich das ganze OO machen (also muss ich aus int eine Integerklasse machen), ohne dabei igrendwelche Regeln bzgl. Design Pattern zu brechen.
Wären int und float zwei Klassen würde das zuweisen ja einfach so nicht gehen. Da bräuchte man halt nen Adapater...
[Edit: Schluss hinzugefügt]
-
Wenn du Int und Float als Klasse Deklarierst brauchst du lediglich die entsprechenden Operatoren überladen und du kannst die Zuweisungen durchführen.
In diesem Sinne wären die Klassen an sich schon ... eine Art Adapter für die Datentypen int und float und du brauchst nicht nochmal eine Klasse oben drauf packen, sinnfrei ist das ganze jedoch dennoch.
-
Den Sinn von gestellten Aufgaben hinterfrage ich schon seit langem nich mehr.
Ich würde es so machen wie du gesagt hast, nur ohne operatoren.Wie bastel ich aber jetzt einen Adapter? Das Design Pattern habe ich (glaub ich) verstanden. Die Beispiele sind aber für meine Aufgabe völlig ungeeignet. Das Beispiel im Forum ist mit Kreis usw. gelöst. Ich habe aber garnicht so viele Klassen.
Ich versteh die Welt nicht mehr...
Meine kurzgefasste Idee :
class Number{}; class Integer:public Number {private: int zahl}; class Float:public Number (private: float zahl};
-
Das Adapter Pattern wird eingesetzt, um Objekte ein bestimmtes Interface bereitstellen zu lassen, das sie von sich aus nicht anbieten. Da sowohl float als auch int die gleichen Rechenoperationen anbieten (ich zähle mal die Rechenoperatoren zum Interface der, äh, built-in Typen) muss nicht zwischen zwei unterschiedlichen Interfaces vermittelt werden.
PS:
Ist des möglich, dass dein Prof unter Adapter etwas anderes versteht als du?
-
Du hast vollkommen recht. Zu dem geleichen Schluss bin auch gekommen. Wozu ein Interface wenn die das schon können.
Wir arbeiten definitiv die Design Patterns durch. Wir meinen das gleiche.