Neuling hat Fragen
-
Hi,
ich bin neu in c++ und hab ein paar Fragen.Ich hab das Buch "C++ von A - Z" und bin schon relativ weit vorgedrungen. Nun als ich bei der OOP also den Klassen angekommen bin, bin ich relativ schnell an meine Grenzen gestoßen und ich merkte dass ich einiges noch nicht verstanden habe.
Nun hab ich mir gedacht programmierst du mal einen kleinen Rechner der verschiedene Funktionen hat. Dieser soll einfach die Grundlagen näher bringen( Variablen, Konstanten, Funktionen).
Nun ist der Quelltext des Taschenrechners sehr lang geworden und ich wollte mal fragen ob mir jemand Tipps geben kann wie man manche Sachen/Funktionen kürzen könnte.
/****************************** * Programm: Taschenrechner * * Author: Gailer Alexander * * Datum: 05.05.2010 * * Datei: funktionen.h * ******************************/ /* TODO (Alex#1#): Quelltext Optimierung, Kommentierung */ // funktionen.h #ifndef _funktionen_h_ #define _funktionen_h_ // Defines #define Teilung "Teilung durch 0 nicht moeglich! Sie kommen zurueck\n" // Bibliotheken #include <iostream> #include <windows.h> #include <iomanip> #include <math.h> using namespace std; // Funktionsdeklaration void prgbeen(); void prgerr(); void sleep( int i); // Additions-Funktion void addieren() { // Benutzerabfrage und Kontrolle cout << "\nAddition: \n\n" << "Wieviele Zahlen moechten Sie addieren? "; unsigned int zahlenmenge; // Überprüfung ob eine Zahl eingegeben wurde if( !( cin >> zahlenmenge ) ) { prgerr(); } // Ein Array mit der Größe des gewünschten Zahlenbereiches erstellen float zarray[zahlenmenge]; // Array mit Zahlen füllen for(int i = 0; i < zahlenmenge; i++) { cout << i+1 << ".Zahl: "; if( !( cin >> zarray[i]) ) { prgerr(); } } float ergebnis = 0; // Array-Werte addieren und in Variable ergebnis speichern for(int i = 0; i < zahlenmenge; i++) { ergebnis = ergebnis + zarray[i]; } // Ausgabe der Berechnung cout << setprecision(15) << "\nDas Ergebnis ist: " << ergebnis << "\n\n"; // Programm beenden / wiederholen prgbeen(); } // Subtaktions-Funktion void subtrahieren() { // Benutzerabfrage und Kontrolle cout << "\nSubtaktion:\n\n" << "Wieviele Zahlen wollen Sie subtrahieren? "; unsigned int zahlenmenge; // Überprüfung ob eine Zahl eingegeben wurde if( !( cin >> zahlenmenge) ) { prgerr(); } // Ein Array mit der Größe des gewüschten Zahlenbereichs erstellen float zarray[zahlenmenge]; // Array mit Zahlen füllen for(int i = 0; i < zahlenmenge; i++) { cout << i+1 << ".Zahl: "; if( !( cin >> zarray[i]) ) { prgerr(); } } float ergebnis = 0; // Array Werte subtrahieren und in Variable Ergebnis speichern for(int i = 0; i < zahlenmenge; i++) { if(i == 0) { ergebnis += zarray[i]; } else { ergebnis -= zarray[i]; } } //Ausgabe der Berechnung cout << setprecision(15) << "Das Ergebnis ist: " << ergebnis << "\n\n"; // Programm Beenden / Wiederholen prgbeen(); } // Multiplikations-Funktion void multiplizieren() { // Benutzerabfrage und Kontrolle cout << "\n Multiplikation:\n\n" << "Wieviele Zahlen wollen Sie multiplizieren? "; unsigned int zahlenmenge; // Überprüfung ob eine Zahl eingegeben wurde if( !(cin >> zahlenmenge) ) { prgerr(); } double zarray[zahlenmenge]; // Array mit Zahlen füllen for(int i = 0; i < zahlenmenge; i++) { cout << i+1 << ".Zahl: "; if( !(cin >> zarray[i]) ) { prgerr(); } } double ergebnis = 0; // Array Werte multiplizieren und in Variable Ergebnis speichern for(int i = 0; i < zahlenmenge; i++) { if( i == 0 ) { ergebnis += zarray[i]; } else { ergebnis *= zarray[i]; } } // Ausgabe der Berechnung cout << setprecision(15) << "Das Ergebnis ist: " << ergebnis << "\n\n"; // Programm wiederholen / beenden prgbeen(); } // Divisions-Funktion void dividieren() { // Benutzerabfrage und Kontrolle cout << "\nDivision: \n\n" << "Wieviele Zahlen moechten Sie dividieren? "; unsigned int zahlenmenge; // Überprüfung ob eine Zahl eingegeben wurde if( !( cin >> zahlenmenge) ) { prgerr(); } double zarray[zahlenmenge]; // Array mit Zahlen füllen for(int i = 0; i < zahlenmenge; i++) { cout << i+1 << ".Zahl: "; if( !(cin >> zarray[i]) ) { prgerr(); } } // Fehleingabe des Benutzers prüfen // Teilung durch 0 for(int i = 1; i < zahlenmenge; i++ ) { if( zarray[i] == 0 ) { cout << Teilung; sleep(3); return; } } double ergebnis = 0; // Berechnung des Ergebnisses und Speicherung in der Variable ergebnis for(int i = 0; i < zahlenmenge; i++) { if(i == 0) { ergebnis += zarray[i]; } else { ergebnis /= zarray[i]; } } // Ausgabe der Ergebnisses cout << setprecision(15) << "Das Ergebnis ist: " << ergebnis << "\n\n"; // Programm beenden / wiederholen prgbeen(); } // Quadrierungs-Funktion void quadrieren() { double qzahl; // Benutzerabfrage und Kontrolle cout << "\nQuadrierung:\n\n" << "Bitte geben Sie die Zahl ein, die Sie quadrieren moechten: "; if( !(cin >> qzahl) ) { prgerr(); } float ergebnis = 0; // Berechnung der Quadrierung und Speichern in der Variable Ergebnis ergebnis = qzahl * qzahl; // Ausgabe der Ergebnisses cout << setprecision(15) << "Das Quadraht von " << qzahl << " ist: " << ergebnis << "\n\n"; // Programm beenden / wiederholen prgbeen(); } // Wurzel-Funktion void wurzel() { double wzahl; // Benutzerabfrage cout << "\nWurzel ziehen\n\n" << "Bitte geben Sie die Zahl ein, aus der sie die Wurzel ziehen moechten: "; if( !(cin >> wzahl) ) { prgerr(); } float ergebnis = 0; // Berechnung der Wurzel aus der Zahl des Benutzers und Speicherung in der Variablen Ergebnis ergebnis = sqrt( wzahl ); // Ausgabe des Ergebnisses cout << setprecision(15) << "Die Wurzel von " << wzahl << " ist: " << ergebnis << "\n\n"; // Programm beenden / wiederholen prgbeen(); } // Spannung berechnen - Funktion void spannung() { unsigned int benauswahl; double spg = 0; double str = 0; double wid = 0; double lei = 0; double wir = 0; do{ // Benutzerabfrage und Kontrolle cout << "\nSpannung:\n\n"; cout << "-1- U = R * I\n"; cout << "-2- U = P / I\n"; cout << "-3- U = Wurzel aus P * R\n"; cout << "-4- Zurueck ins Elektrotechnik-Menue\n"; if( !(cin >> benauswahl) ){ prgerr(); } switch(benauswahl) { case 1: // U = R * I // Benutzerabfrage und Kontrolle cout << "Bitte geben Sie den Widerstandswert ein( R in Ohm ): "; if( !(cin >> wid) ) { prgerr(); } cout << "Bitte geben Sie den Stromwert ein ( A in Ampere ): "; if( !(cin >> str) ) { prgerr(); } // Berechnung des Ergebnisses spg = wid * str; // Ausgabe des Ergebnisses cout << setprecision(15) << "Die Spannung betraegt: " << spg << " Volt!\n"; // Programm beenden / wiederholen prgbeen(); break; case 2: // U = P / I // Benutzerabfrage und Kontrolle cout << "Bitte geben Sie den Leistungswert ein( P in Watt ): "; if( !(cin >> lei) ) { prgerr(); } cout << "Bitte geben Sie den Stromwert ein( I in Ampere ): "; if( !(cin >> str) ) { prgerr(); // Teilung durch 0 wird blockiert } else if(str == 0) { cout << Teilung; sleep(3); break; } // Berechnung des Ergebnisses spg = lei / str; //Ausgabe des Ergebnisses cout << setprecision(15) << "Die Spannung betraegt: " << spg << " Volt!\n"; //Programm beenden / wiederholen prgbeen(); break; case 3: // U = Wurzel aus P * R // Benutzerabfrage und Kontrolle cout << "Bitte geben Sie den Leistungswert ein( P in Watt ): "; if( !(cin >> lei) ) { prgerr(); } cout << "Bitte geben Sie den Widerstandswert ein( R in Ohm ): "; if( !(cin >> wid) ) { prgerr(); // Teilung durch 0 wird blockiert } else if ( wid == 0 ) { cout << Teilung; sleep(3); break; } //Berechnung des Ergebnisses spg = sqrt(lei*wid); // Ausgabe des Ergebnisses cout << setprecision(15) << "Die Spannung betraegt: " << spg << " Volt!\n"; prgbeen(); break; case 4: break; default: // Ungueltige Zahl eingebeben, Benutzer muss 3 Sekunden warten und kommt wieder ins Elektrotechnik Menü cout << "Sie haben eine ungueltige Zahl eingegeben( 1 - 4) !\n"; sleep(3); break; } } while( benauswahl != 4 ); return; } // Strom berechnen - Funktion void strom() { unsigned int benauswahl; double spg = 0; double str = 0; double wid = 0; double lei = 0; double wir = 0; do{ // Benutzerabfrage und Kontrolle cout << "\nStrom:\n\n"; cout << "-1- I = U / R\n"; cout << "-2- I = P / U\n"; cout << "-3- I = Wurzel aus P / R\n"; cout << "-4- Zurueck ins Elektrotechnik-Menue\n"; if( !(cin >> benauswahl) ) { prgerr(); } switch(benauswahl) { case 1: // I = U / R // Benutzerabfrage und Kontrolle cout << "Bitte geben Sie den Spannungswert ein ( U in Volt ): "; if( !( cin >> spg) ) { prgerr(); } cout << "Bitte geben Sie den Widerstandswert ein ( R in Ohm ): "; if( !(cin >> wid) ) { prgerr(); } else if( wid == 0 ) { cout << Teilung; sleep(3); break; } // Berechnung des Ergebnisses str = spg / wid; // Ausgabe des Ergebnisses cout << "\nDer Strom betraegt: " << str << " Ampere.\n\n"; prgbeen(); break; case 2: // I = P / U // Benutzerabfrage und Kontrolle cout << "Bitte geben Sie den Leistungwert ein ( P in Watt ): "; if( !( cin >> lei) ) { prgerr(); } cout << "Bitte geben Sie den Spannungwert ein ( U in Volt ): "; if( !(cin >> spg) ) { prgerr(); } else if( spg == 0 ) { cout << Teilung; sleep(3); break; } // Berechnung des Ergebnisses str = lei / spg; // Ausgabe des Ergebnisses cout << "\nDer Strom betraegt: " << str << " Ampere.\n\n"; prgbeen(); break; case 3: // I = Wurzel aus P / R // Benutzerabfrage und Kontrolle cout << "Bitte geben Sie den Leistungswert ein ( P in Watt ): "; if( !( cin >> lei ) ) { prgerr(); } cout << "Bitte geben Sie den Widerstandswert ein ( R in Ohm ): "; if( !(cin >> wid) ) { prgerr(); } else if ( wid == 0 ) { cout << Teilung; sleep(3); break; } // Berechnung des Ergebnisses str = sqrt(lei/wid); //Ausgabe des Ergebnisses cout << "\nDer Strom betraegt: " << str << " Ampere.\n\n"; prgbeen(); break; case 4: break; default: cout << "Sie haben keine gueltige Zahl eingegeben( 1 - 4 )! Sie kommen zurueck.\n"; sleep(3); } } while (benauswahl != 4); } // Widerstand berechnen - Funktion void widerstand() { unsigned int benauswahl; double spg = 0; double str = 0; double wid = 0; double lei = 0; double wir = 0; double rho = 0; double len = 0; double que = 0; do{ // Benutzerabfrage und Kontrolle cout << "\nWiderstand:\n\n"; cout << "-1- R = U / I\n"; cout << "-2- R = P / I(quadrat)\n"; cout << "-3- R = (rho * l) / A (rho = Leitungswiderstand)\n"; cout << "-4- Zurueck ins Elektrotechnik-Menue\n"; if( !( cin >> benauswahl) ) { prgerr(); } switch( benauswahl ) { case 1: // R = U / I // Benutzerabfrage und Kontrolle cout << "Bitte geben Sie den Spannungswert ein( U in Volt ): "; if( !(cin >> spg) ) { prgerr(); } cout << "Bitte geben Sie den Stromwert ein( I in Ampere ): "; if( !(cin >> str) ) { prgerr(); } else if(str == 0) { cout << Teilung; sleep(3); break; } // Berechnung des Ergebnisses wid = spg/str; // Ausgabe des Ergebnisses cout << "Der Widerstand betraegt: " << wid << " Ohm.\n"; prgbeen(); break; case 2: // R = P * I² // Benutzerabfrage und Kontrolle cout << "Bitte geben Sie den Leistungswert an( P in Watt ): "; if ( !(cin >> lei) ) { prgerr(); } cout << "Bitte geben Sie den Stromwert an( I in Ampere ): "; if( !(cin >> str) ) { prgerr(); } // Berechnung des Ergebnisses wid = lei*(str*str); // Ausgabe des Ergebnisses cout << "Der Widerstand betraegt: " << wid << " Ohm\n"; prgbeen(); break; case 3: // R = ( rho * l ) / A // Benutzerabfrage und Kontrolle cout << "Bitte geben Sie den spezifischen Leitungswiderstand an( rho in SI ): "; if( !(cin >> rho) ){ prgerr(); } cout << "Bitte geben Sie die Leitungslaenge an( l in Meter ): "; if ( !(cin >> len) ){ prgerr(); } cout << "Bitte geben Sie den Querschnitt an ( A in Quadrat-Meter): "; if ( !(cin >> que) ) { prgerr(); } else if( que == 0 ) { cout << Teilung; sleep(3); break; } // Berechnung des Ergebnisses wid = (rho*len) / que; // Ausgabe des Ergebnisses cout << "Der Widerstand betraegt: " << wid << " Ohm\n"; prgbeen(); break; case 4: break; default: cout << "Sie haben keine gueltige Zahl eingegeben( 1 - 4 )! Sie kommen zurueck.\n"; sleep(3); } } while( benauswahl != 4 ); } // Leistung berechnen - Funktion void leistung() { unsigned int benauswahl; double spg = 0; double str = 0; double wid = 0; double lei = 0; double wir = 0; do{ cout << "\nLeistung:\n\n"; cout << "-1- P = U * I\n"; cout << "-2- P = I(quadrat) * R\n"; cout << "-3- P = U(quadrat) / R\n"; cout << "-4- Zurueck ins Elektrotechnik-Menue\n"; if( !(cin >> benauswahl) ) { prgerr(); } switch(benauswahl) { case 1: // P = U * I // Benutzerabfrage und Kontrolle cout << "Bitte geben Sie den Spannungswert ein( U in Volt ): "; if( !(cin >> spg) ) { prgerr(); } cout << "Bitte geben Sie den Stromwert ein( I in Ampere ): "; if( !(cin>> str) ) { prgerr(); } // Berechnung des Ergebnisses lei = spg * str; // Ausgabe des Ergebnisses cout << "Die Leistung betraegt " << lei << " Watt.\n"; prgbeen(); break; case 2: // P = I² * R // Benutzerabfrage und Kontrolle cout << "Bitte geben Sie den Stromwert an( I in Ampere ): "; if( !( cin >> str) ) { prgerr(); } cout << "Bitte geben Sie den Widerstandswert an( R in Ohm ): "; if( !( cin >> wid) ) { prgerr(); } else if( wid == 0 ) { cout << Teilung; sleep(3); break; } // Berechnung des Ergebnisses lei = (str*str) / wid; // Ausgabe des Ergebnisses cout << "Die Leistung betraegt " << lei << " Watt.\n"; prgbeen(); break; case 3: // P = U² / R // Benutzerabfrage und Kontrolle cout << "Bitte geben Sie die Spannung an( U in Volt ): "; if( !(cin >> spg) ) { prgerr(); } cout << "Bitte geben Sie den Widerstand an( R in Ohm ): "; if( !(cin >> wid) ) { prgerr(); } else if( wid == 0 ) { cout << Teilung; sleep(3); break; } // Berechnung des Ergebnisses lei = (spg*spg) / wid; // Ausgabe des Ergebnisses cout << "Die Leistung betraegt: " << lei << " Watt.\n"; prgbeen(); break; case 4: break; default: cout << "Sie haben keine gueltige Zahl eingegeben( 1 - 4 )! Sie kommen zurueck.\n"; sleep(3); } } while( benauswahl != 4 ); } // Wirkungsgrad berechnen - Funktion void wirkungsgrad() { unsigned int benauswahl; double pzu; double pab; double eta; do{ // Benutzerabfrage und Kontrolle cout << "\nWirkungsgrad:\n\n"; cout << "-1- eta = abgegebene Leistung / zugefuehrte Leistung\n"; cout << "-2- Zurueck ins Elektrotechnik Menue\n"; if( !( cin >> benauswahl) ) { prgerr(); } if( benauswahl == 1 ) { // Benutzerabfrage und Kontrolle cout << "Bitte geben Sie den abgegebene Leistung an( Pab in Watt): "; if( !( cin >> pab) ) { prgerr(); } cout << "Bitte geben Sie die zugefuehrte Leistung an ( Pzu in Watt): "; if( !(cin >> pzu) ) { prgerr(); } else if( pzu == 0 ) { cout << Teilung; sleep(3); break; } // Berechnung des Ergebnisses eta = pab / pzu; // Ausgabe des Ergebnisses cout << "Der Wirkungsgrad betraget: " << eta << ".\n"; prgbeen(); break; } else if( benauswahl == 2 ) { break; } else { cout << "Sie haben keine gueltige Zahl eingegeben( 1 - 2 )! Sie kommen zurueck.\n"; sleep(3); } } while( benauswahl != 2 ); } // Programm Beenden Funktion void prgbeen () { cout << "Programm beenden? ( J \\ N )"; char prgbeen; cin >> prgbeen; if( prgbeen == 'J' || prgbeen == 'j' ) { cout << "Denke dran, das ist nur ein Lern-Programm. Programm wird in 5 Sekunden beendet!\n\n"; for(int i=5; i > 0; i--) { cout << i << "\n"; // Wartezeit zur Übersicht Sleep(1000); } exit(0); } else if( prgbeen == 'N' || prgbeen == 'n' ) { cout << "Sie kommen in 3 Sekunden zurueck\n"; sleep(3); } else { prgerr(); } } void prgerr () { cerr << "Sie haben ein ungueltiges Zeichen eingegeben! Programm wird beendet!\n"; for(int i = 3; i > 0; i--) { cout << i << "\n"; Sleep(1000); } exit(1); } void sleep( int i) { for( i; i > 0; i--) { cout << i << "\n"; Sleep(1000); if(i==1) { cout << "\n\n"; } } } #endif/****************************** * Programm: Taschenrechner * * Author: Gailer Alexander * * Datum: 05.05.2010 * * Datei: main.cpp * ******************************/ /* TODO (Alex#1#): Quelltext Optimierung, Kommentierung */ #include <iostream> #include "funktionen.h" using namespace std; // Funktionsdeklarationen void addieren(); void subtrahieren(); void multiplizieren(); void dividieren(); void quadrieren(); void wurzel(); void spannung(); void strom(); void widerstand(); void leistung(); void wirkungsgrad(); // Hauptprogramm int main() { /* HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hStdout, BACKGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY); */ // Programm Beschreibung und Titel cout << "----------------------------------------------------------\n"; cout << "---- Taschenrechner-Programm | Gailer Alexander ----\n"; cout << "---- Build-Date: 05.05.2010 | Lern-, Testprogramm ----\n"; cout << "---- Bedenke, das ist nur ein Lern-, Testprogramm ----\n"; cout << "----------------------------------------------------------\n\n\n"; //Benutzerabfrage zur Auswahl der Berechnung int benauswahl; do { // Ausgabe des Hauptmenüs cout << "Hauptmenu:\n\n"; cout << "-1- Addidtion ( + )\n"; cout << "-2- Subtraktion ( - )\n"; cout << "-3- Multiplikation ( * )\n"; cout << "-4- Division ( \\ )\n"; cout << "-5- Quadrieren\n"; cout << "-6- Wurzel ziehen\n"; cout << "-7- Elektotechnik\n"; cout << "-8- Ende\n\n"; cout << "Bitte Berechnungsart waehlen: "; // Benutzereingabe auf falsche Eingabe überwachen(Buchstaben oder Sonderzeichen) if( !( cin >> benauswahl) ) { prgerr(); } // Funktions-Aufruf der Benutzerwahl switch ( benauswahl ) { case 1: // Addition addieren(); break; case 2: // Subtraktion subtrahieren(); break; case 3: // Multiplikation multiplizieren(); break; case 4: // Division dividieren(); break; case 5: // Quadrierung quadrieren(); break; case 6: // Wurzel ziehen wurzel(); break; case 7: // Elektrotechnik int benauswahl; do { cout << "\nElektrotechnik - Hauptmenu\n\n"; cout << "-1- Spannung berechnen\n"; cout << "-2- Strom berechnen\n"; cout << "-3- Widerstand berechnen\n"; cout << "-4- Leistung berechnen\n"; cout << "-5- Wirkungsgrad berechnen\n"; cout << "-6- Zurueck ins Hauptmenu\n\n"; cout << "Bitte treffen Sie eine Auswahl ( 1 - 6 ): "; // Benutzereingabe abwarten und prüfen ob er eine gueltiges Zeichen eingegeben hat, falls ein Buchstabe eingegeben wurde wird das Programm beendet if( !( cin >> benauswahl) ) { prgerr(); } switch(benauswahl) { case 1: // Spannung berechnen spannung(); break; case 2: // Strom berechnen strom(); break; case 3: // Widerstand berechnen widerstand(); break; case 4: // Leistung berechnen leistung(); break; case 5: // Wirkungsgrad berechnen wirkungsgrad(); break; case 6: break; default: // Ungueltige Zahl eingebeben, Benutzer muss 3 Sekunden warten und kommt wieder ins Elektrotechnik Menü cout << "Sie haben eine ungueltige Zahl eingegeben!( 1 - 6 )\n"; for(int i = 3; i > 0; i--) { cout << i << "\n"; Sleep(1000); if( i == 1 ) { cout << "\n\n"; } } break; } } while ( benauswahl != 6); break; case 8: // Programm-Beendung break; default: // Falsche Zahlen-Eingabe cout << "Sie haben eine ungueltige Zahl eingegeben! ( 1 - 8 )\n"; } } while( benauswahl != 8 ); return 0; }Hmm gibt es hier im Forum keine Spoiler Option? Oder wäre es geschickter die Dateien hochzuladen?
Gruß Alex
-
Quellcode in weitere logische Teile zerlegen. Außerdem wiederholdenen Code finden und entsprechend auslagern. Beispiel:
if ( !(cin >> lei) ) { prgerr(); }Findet sich total oft in deinem Code. Stattdessweren wäre eine Funktion besser:
wert = leseDouble("Bitte den Wert eingeben:");Außerdem Variablen dort deklarieren, wo sie benötigt werden.
Und wenn du richtig gut sein willst, dann nutze Exceptions und lass dieses prgbeen() weg... Das bläht deinen Code auch total auf.
Deine Menüs wiederholen sich auch total oft. Eventuell kannst du dafür eine eigene Klasse schreiben.
-
Du hast sehr viel Code doppelt und dreifach mit jeweils kleinen Änderungen. Davon kann man sehr vieles zusammenkürzen indem man die Abstraktionsmittel von C++ benutzt: Templates (wahrscheinlich noch nicht drangekommen), Funktionszeiger (Falls schon drangekommen), bessere Aufteilung der Funktionen (z.B. eine allgemeine Eingabefunktion), zur Not auch Makros.
-
Danke erstmal

Seppj schrieb:
Du hast sehr viel Code doppelt und dreifach mit jeweils kleinen Änderungen. Davon kann man sehr vieles zusammenkürzen indem man die Abstraktionsmittel von C++ benutzt: Templates (wahrscheinlich noch nicht drangekommen), Funktionszeiger (Falls schon drangekommen), bessere Aufteilung der Funktionen (z.B. eine allgemeine Eingabefunktion), zur Not auch Makros.
Hmm Genau da liegt mein Problem, Templates Zeiger hab ich mir zwar schonmal durchgelesen, aber da endet irgendwie mein Verständnis, deswegen dachte ich mir ich schreib mal nen Rechner mit den Grundfunktionen.
ghjghj schrieb:
Deine Menüs wiederholen sich auch total oft. Eventuell kannst du dafür eine eigene Klasse schreiben.
Was meinste damit?
Gruß Alex
-
Menu hauptmenu("Hauptmenu"); hauptmenu.add("Punkt 1"); hauptmenu.add("Punkt 2"); int auswahl = hauptmenu.display(); switch (auswahl) { //... }Ausgabe:
--- Hauptmenu --- 1. Punkt 1 2. Punkt 2 Auswahl:Alternativ wäre das auch über Funktionszeiger zu realisieren, dann fällt sogar das switch werg, aber das führt wohl zu weit.
-
hjkhjk schrieb:
Menu hauptmenu("Hauptmenu"); hauptmenu.add("Punkt 1"); hauptmenu.add("Punkt 2"); int auswahl = hauptmenu.display(); switch (auswahl) { //... }Ausgabe:
--- Hauptmenu --- 1. Punkt 1 2. Punkt 2 Auswahl:Alternativ wäre das auch über Funktionszeiger zu realisieren, dann fällt sogar das switch werg, aber das führt wohl zu weit.
Jo, noch. Das Problem ist mir macht das Programmieren riesen Spass, das nachdenken über bestimmt Lösungsansätze, verschiedene Funktionen ausdenken, usw. Nur die Umsetzung hakt bei mir glaub ich. Bzw. das erweiterte Veständnis für Zeiger, Klassen usw... Und die einzige Lösung ist wahrscheinlich üben üben üben .
Gruß Alex
-
Noch etwas anderes: Die erste Datei soll wohl eine Header-Datei sein -- den Include-Guards zufolge. Du hast in dieser Datei aber viele Funktionsdefinitionen drin, die da nicht reingehören.
void foo(); // <-- Deklaration void foo() // <-- Definition { cout << "hello!\n"; }Du darfst von diesen Definitionen nur jeweils eine einzige im Programm haben. Wenn Du Dein Programm in mehrere Module aufgeteilt hast und mehr als ein Modul diese Header-Datei einbindet, übersetzt der Compiler die Funktionen mehrfach und Du erhälst .obj/.o-Dateien (kompilierte "Übersetzungseinheiten"), die die Funktionsdefinitionen mehrfach enthalten. Das mag der Linker nicht und ist auch verboten.