Routinen zusammen führen
-
Guten Tag allerseits.
Ich bin neu hier im Forum und ein Neuling in der Sprache C++.
In meinem kürzlichst angebrochenen Studium geht es nun um die besagte Sprache.Bei dem Programm welches wir jetzt schreiben, müssen 2 Eingaben getätigt werden, einmal für integer und einmal für float. Ich habe die Eingaben in Extra Routinen gepackt:
void valueInt_input(int &start, int &end, int &step); void valueFloat_input(float &start, float &end, float &step);Der Inhalt der beiden Routinen ist identisch. Die Eingabe funktioniert auch einwandfrei. Mein Frage ist nun ob ich beide Routinen zusammenfassen kann weil im inneren die selben Aktionen durchgeführt werden. Einmal für Integer und einmal für Float.
Schön wäre jetzt eine Eingaberoutine wo es egal ist ob ich der Routine float oder integer übergebe.Ich kann mir schon denken, dass so etwas nicht möglich ist. Aber da ich wie gesagt neu bin möchte ich gerne eine Bestätigung von jemanden haben der mehr Ahnung hat. (Eine Möglichkeit wie es geht wäre natürlich besser!
)Vielen Dank schonmal.
mfg frock

-
Es ist möglich. Allerdings könnte es dich für den Anfang etwas überfordern, da die Thematik nicht ganz trivial ist.
Man macht das mit (Funktions-)Templates. Templates sind Vorlagen, für die beliebige Typen eingesetzt werden können:
template <typename T> void valueInt_input(T &start, T &end, T &step);Bist du dir aber sicher, dass du das willst? Wenn ja, gibts z.B. hier weitere Informationen. Und du solltest dir überlegen, ob Referenzübergaben da angebracht sind (veränderst du die Parameter?).
-
es gibt die möglichkeit über templates
d.h. du setzt statt den datentyp eine variable ein und der compiler generiert für jeden datentyp dann die funktion
beispiel:
template<class DATENTYP> void eingabe(DATENTYP & a, DATENTYP & B) { cin >> a; cin >> b; } int main() { float x, y; int d, e; double a1, a2; CUSTOM_CLASS c1, c2; // mit überladenem >> operator eingabe(x, y); eingabe(d, e); eingabe(a1, a2); eingabe(c1, c2); }in die methode kannst du natürlich noch merh reinpacken, aber ich denke das reicht um das prinzip zu verdeutlichen
wenn du noch nichts von überladen weisst dann alss die custom class eifnach beim verstehen wegso zum verständnis:
die erste eingabe (eingabe(x, y);) ist für floats, de rcompiler generiert deine methode nun für den datentyp float
das gleiche für int und doublehttp://www.softgames.de/developia/viewarticle.php?cid=23241
doer such sosnt mal bei google nach c++ templates
-
Danke für die schnellen und sehr kompetenten Antworten!!!
Ich hab es einfach mal versucht, denn von nix kommt nix.
Also ich hab es hinbekommen und verstanden warum es funktioniert. Morgen werde ich mich nochmal genauer mit deinem Link beschäftigen weil es ja mehrere Varianten zu geben scheint, aber jetzt bin ich erstmal sehr glücklich dass es klappt.Werd mich auch am Montag mit meinem Prof nochmal hinsetzen und das besprechen. Nicht dass ich es doch nicht richtig verstanden habe und es nur Glück war.
Für alle die es interessiert und das selbe Problem haben.
Hier ist die hoffentlich richtige Routine (hat meine ersten Test perfekt bestanden):template <class T> void value_input(T &start, T &end, T &step) { cout<<"Anfangswert : ";cin>>start; cout<<"Endwert : ";cin>>end; do //Schleife für eine eventuell falsche Eingabe der Schrittfolge { cout<<"Schrittfolge : ";cin>>step; if(step==0) cout<<"Null Schritte sind nicht möglich."<<endl; //Hinweis auf die fehlerhafte Eingabe } while(step==0); }Falls mir doch noch Fehler auffallen sollten oder mein Prof mir n Schlag auf den Hinterkopf gibt (
) melde ich mich nochmal. Falls jemanden noch ein Fehler am Code auffällt wäre es sehr nett wenn er sein Senf dazugibt.mfg frock
P.S.: Nochmal vielen Dank. Echt geiles Forum. Ich werd das mal an meine Studienkollegen weiter empfehlen.
-
frock schrieb:
Falls jemanden noch ein Fehler am Code auffällt wäre es sehr nett wenn er sein Senf dazugibt.
Fehler sehe ich keine, erstaunlich, wie schnell du das mit den Templates hingebracht hast. Nur eine kleine Anmerkung: Du müsstest eigentlich nicht zwei mal auf
step==0prüfen. Eine Möglichkeit wäre eine Endlosschleife, die erst dann beendet wird, wenn eine richtige Eingabe getätigt wurde.Templates und die generische Programmierung sind eines der mächtigsten Instrumente der Sprache. Kombiniert mit Klassen und OOP sind sie praktisch die Macht an sich.

Die vielen Möglichkeiten wirst du vielleicht noch erkennen, wenn du mal auf die STL stösst...frock schrieb:
Danke für die schnellen und sehr kompetenten Antworten!!!
[...]
P.S.: Nochmal vielen Dank. Echt geiles Forum. Ich werd das mal an meine Studienkollegen weiter empfehlen.Ich bin gerne bereit zu helfen, wenn die Fragestellenden sich freundlich verhalten und ihr Problem auch beschreiben können.
