Frage zu Methoden-/Funktionsaufruf
-
Ich habe eine Bruchklasse und eine mathematische Klasse, die ich beide für eine Berechnung inkludiere.
Im Hauptprogramm main rufe ich die mathematische Klasse, wenn ich den Datentypen float verwende, so auf:
int z = 4; int s = 8; vector<vector<float> >vec(z); for (int i = 0; i < z; i++) vec[i].resize(s); vec[0][0] = float 1.33f; ... //Initialisieren simplex sim(z, s, vec); //Konstruktoraufruf, float wird verwendet vec = sim.calc(); //Ende. In vec ist jetzt das Ergebnis, soweit so gut
Wenn ich die Bruchklasse verwende, mach ich alles genauso, nur dass ich statt des Datentyps float meine Klasse frac verwende. Also so:
int z = 4; int s = 8; vector<vector<frac> >vec(z); for (int i = 0; i < z; i++) vec[i].resize(s); vec[0][0] = frac(4,3); ... //Initialisieren simplex sim(z, s, vec); //Konstruktoraufruf, float wird verwendet vec = sim.calc(); //Ende. In vec ist jetzt das Ergebnis, soweit so gut
Der Quellcode der simplex-Quellcodedatei muss dann aber immer von mir von Hand angepasst werden, je nachdem, ob ich float oder frac verwende.
Hier z. B. der Konstruktor der Klasse simplex:[cpp]simplex::simplex(int z, int s, vector<vector<frac> >temp) : m_arr(z) //diese und alle weiteren Zeilen müsste ich für float anpassen <würg>[/cpp]
Ich habe also zwei Quellcodeversionen (und Headerversionen) vorliegen. Einmal für float und einmal für frac. Das kann aber doch nicht richtig sein, oder? Angenommen, ich möchte das mal mit int machen, dann müsste ich noch eine Version der Matheklasse schreiben. Außerdem geht Flexibilität verloren.
Ja, was mach ich denn nun? Müssen hier die sog. Templates ran?
Danke.
-
Ja da müssen Templates ran.
Du kannst dir übrigens die for Schleife zum erzeugen der Matrix sparen:
vector< vector<frac> > vec( z, vector<frac>(s) );
-
Das ist gut, danke.