[erledigt wg. unsinn] boost::rational<int> erweitern
-
Hallo,
nach Foren-/Google-Suche habe ich nicht wirklich mein Problem,
geschweige denn eine Lösung gefunden. Deshalb jetzt meine Anmeldung hier im Forum.Ich hätte gerne die netten Funktionalitäten der Rationalen Zahlen aus den Boost-Bibliotheken genutzt, wie z.B. die dort definierten Operatoren.
Mir fehlt allerdings wohl noch so Einiges an Kenntnis/Erfahrung in C++.
Der naive Ansatzclass c_rat : public boost::rational<int> { public: c_rat(int n, int d) {}; ... }funktioniert leider nicht wie gewünscht.
Der spezielle Konstruktor der Basisklasse wird nicht aufgerufen.
(Ohne Erweiterung ist z.B folgendes möglich:... boost::rational<int> r(1,2); boost::rational<int> s(2,3); boost::rational<int> t = r + s; ...mit Ergebnis t=7/6)
Stattdessen wird nur der Standardkonstruktor von boost::rational<int> aufgerufen.Kann wer mein Problem verstehen? Hat wer eine Idee?
Vielen Dank für die Aufmerksamkeit,
azuresky
-
class c_rat : public boost::rational<int> { public: c_rat(int n, int d):boost::rational<int>(n,d){}; ... }PS: Was willst Du denn erweitern? Vermutlich ist Vererbung hier gar nicht sinnvoll.
-
Welchen Zweck hat hier überhaupt die Vererbung? Geht es dir nur darum, einen kürzeren Typbezeichner zu haben? Dann tut's auch ein typedef.
-
azuresky schrieb:
Kann wer mein Problem verstehen? Hat wer eine Idee?
Der technische Fehler ist, dass du in der Initialisierungsliste deiner abgeleiteten Klasse nicht den (richtigen) Konstruktor der Basisklasse aufrufst. So wie du es hast wird der default-Ctor der Basisklasse aufgerufen.
Der fachliche Fehler ist außerdem, dass du von einer Werte-Klasse ableitest - wozu diese normalerweise nicht konzeptioniert sind.
-
Wahnsinn - mit Lichtgeschwindigkeit

Danke!Und, Mist, ich hatte diese ":"-Schreibweise schonmal gesehen, aber vergessen auszuprobieren (stattdessen in der Implementation so ein Schwachsinn, wie
boost::rational<int>::boost::rational<int>(n,d);mit verschieden geformten Klammern an geeigneten Stellen.
Tachions Code hat wie gewünscht funktioniert.
Ich habe zu dieser Schreibweise aber auf die schnelle keine Erklärung gefunden.
Mag mir das nochmal wer in ein, zwei Worten beschreiben?@MFK: Ich brauch noch spezielle Zufallsgeneratoren, Ausgabefunktionen (Latex-Code, für später html-moodle-zeux), ...
Nochmals danke,
azureskyedit: Rechtschreibung
-
azuresky schrieb:
Ich habe zu dieser Schreibweise, aber auf die schnelle keine Erklärung gefunden.
Mag mir das nochmal wer in ein, zwei Worten beschreiben?ok, ein Wort: "Initialisierungsliste" - zweites Wort: "google"

Sollte dir alle Infos geben die du benötigst
-
Jepp,
mit Hilfe des Begriffs "Initialisierungsliste" finde ich auch eine Erklärung per Google
.Und, ja, es kann sein, daß eine Erweiterung hier übertrieben ist.
Die Idee war halt, alles was meine Rationalen Zahlen so können müssen hübsch zu verpacken ...
(So oft habe ich noch nicht "produktiv" gecoded - nur viel simpel gespielt)Ich warte noch kurz ab, aber prinzipell kann ich dann den Titel auf "gelöst" setzen.
azuresky
-
Wahrscheinlich liegt hier tatsächlich ein "fachlicher Fehler" meinerseits vor
und die Klasse boost::rational<int> ist nicht zum Ableiten konzeptioniert.Bei naiver Verwendung ( "c_rat t = r + s;" ) gibt mir g++
conversion from 'boost::rational<int>' to non-scalar type 'c_rat' requested... dann muß ich eben doch alles außerhalb machen - schade, ich brauche diese Zahlen öfters mal ...
azuresky
-
azuresky schrieb:
@MFK: Ich brauch noch spezielle Zufallsgeneratoren, Ausgabefunktionen (Latex-Code, für später html-moodle-zeux), ...
Hallo azuresky,
all dies sollte nicht(!) Teil einer Klasse Rational sein .. ich denke, das ist auch das, worauf MFK hinaus will.
Das lässt sich doch problemlos mit freistehenden Funktionen realisieren - oder?
-
Ja, ja,
ich hab mein Spielzeug beiseite gelegt *seufz* *schnief*
... wenn's eben schlechte(s) Konzeptionierung/Design sein soll ... nagut.
Jetzt ist alles "frei" definiert.Vielen dank nochmals allen,
azuresky