In einer Methode einer Klasse die Methode einer anderen Klasse aufrufen ?
-
Smuji schrieb:
eine andere frage. ich würde gern ein objekt als array verwalten, und gern einen zähler verwenden
int anzahl; Hochschule *thm[10]; // und dann mit: thm[anzahl] ... weiterarbeiten
wie mache ich diesen zähler global ?!? also so, dass alle klassen und auch main() den aktuellen wert sehen, oder zur not auch bearbetien können ?
Am besten gar nicht! Vermeide globale Variablen. Vermeide globale Variablen. Vermeide globale Variablen. Schreib "Vermeide globale Variablen." 100x auf einen Zettel. Erst danach solltest du über die Verwendung globaler Variablen nachdenken, dabei aber dich an den 100x geschriebenen Text erinnern.
Verwende auch keine Arrays + Zähler. Nimm stattdessen einen
std::vector<Hochschule*>
. Bleibt nur noch die Frage, ob nicht einstd::vector<Hochschule>
oder einstd::vector<std::unique_ptr<Hochschule>>
sinnvoller wäre.
-
Danke, bin davon auch schon weg gekommen.
Ich hänge gerade daran, wie ich das mit dem Einschreiben realisieren soll. Also wie letztlich die Ausgabe aussehen soll
Bsp.:
Es wird im Menü ausgewählt, dass sich der Student in einen Studiengang einschreiben will.
Also muss ich verschiedene Methode durchlaufen...1. neuen Fachbereich erstellen und ihm über den Konstruktor einen Namen geben
2. Den Studenten fragen in welchen Studiengang er sich einschreiben will
3. Seinen Namen abfragen.Nun muss ja später eine Ausgabe erzeugt werden a la:
Hans Müller hat sich im Fachbereich XYZ in den Studiengang ZYX eingeschrieben
Also brauche ich ja in den Klassen irgendeinen "status" der gesetzt wird, damit ich später die richtige Ausgabe erzeugen kann.
Bsp.:
Student wählt Studiengang AEB, also setze ich dort den status auf 1 und später bei der Ausgabe Frage ich über if(status == 1) dann gebe AEB aus, if(status == 2) dann TI und wenn status = 0, dann kein Eintrag ?!?
Naja, ich probiere es mal so...vllt. fällt mir ja eine bessere lösung noch ein.
-
Du sollst nicht für jeden Studenten einen Fachbereich erstellen. Orientiere dich da an der Realität.
Man könnte sich z.B. überlegen, ob die Uni über Studenten (einen Vektor von Studenten) verfügt und jeder Student einen Pointer auf den Studiengang den er belegt. (Mal als lockere Anregung zur Umsetzung).
-
ok,
habe es bald fertig und poste es dann hier...
allerdings habe ich gerade das problem, dass ich eine abfrage mache:
Fachbereich *objekt; if ((objekt->get_status() == 1) || (objekt->get_status() == 2)) { objekt->set_kurs(); }
bitte erstmal nicht über den sinn diskutieren, das machen wir wenn ich fertig bin, mich interessiert nur, warum ich fehler:
Fehler C2059 Syntaxfehler: "||"
bekomme, also ich möchte gern eine ODER-abfrage starten, ich habe schon versucht,
#include <conio.h>
#include <stdbool.h>einzubinden.... oder benutze ich die falschen tasten für das ODER ? oder sitzen meine klammern falsch?
zumindest geben meine methoden entweder den wert 1 oder 2 zurück.
EDIT::
habe es nun versucht mal anders zu lösen, um überhaupt die funktion zu testen:
void Hochschule::einschreiben_kurs() { Fachbereich *objekt; if (objekt->get_status() == 1) { objekt->set_kurs(); } else if (objekt->get_status() == 2) { objekt->set_kurs(); } else { cout << "Bitte zuerst in einen Studiengang wählen !!" << endl << endl; } }
**
Fehler:Fehler C4700 Die nicht initialisierte lokale Variable "objekt" wurde verwendet.**
was ist denn nun wieder falsch ?
-
Smuji schrieb:
allerdings habe ich gerade das problem, dass ich eine abfrage mache:
Fachbereich *objekt; if ((objekt->get_status() == 1) || (objekt->get_status() == 2)) { objekt->set_kurs(); }
bitte erstmal nicht über den sinn diskutieren
Das lasse ich mir nicht vorschreiben. Vermeide es, magische Zahlen wie 1, 2, etc. für etwas anderes als offensichtliche Dinge zu verwenden. Welcher Studiengang ist "1", welcher "2"? Wenn du sowas hart verdrahten willst (würde ich von abraten, da sich Studiengänge und Fachbereiche auch ändern können), solltest du wenigstens ein
enum
verwenden., das machen wir wenn ich fertig bin, mich interessiert nur, warum ich fehler:
Fehler C2059 Syntaxfehler: "||"
bekomme, also ich möchte gern eine ODER-abfrage starten,
Das ist die vollständige Fehlermeldung? Kommt mir aber sehr kurz vor!
ich habe schon versucht,
#include <conio.h>
#include <stdbool.h>einzubinden.... oder benutze ich die falschen tasten für das ODER ? oder sitzen meine klammern falsch?
Die includes haben damit rein gar nichts zu tun! Die Klammern sehen auf den ersten Blick auch richtig aus. Also ist dein Fehler anderswo.
Edit: zu deinem Edit:
Das steht doch in der Fehlermeldung des Compilers! Du hast einen nicht initialisierten Pointer auf einenFachbereich
namensobjekt
dereferenziert. Was soll denn da rauskommen? (welcher Fachbereich soll das sein, es wurde keiner zugewiesen!)
-
erstmal vielen dank für deine ausführliche antwort.
wie genau meinst du das ? ich verstehe deine antwort nicht ganz.
"Das steht doch in der Fehlermeldung des Compilers! Du hast einen nicht initialisierten Pointer auf einen Fachbereich namens objekt dereferenziert. Was soll denn da rauskommen? (welcher Fachbereich soll das sein, es wurde keiner zugewiesen!)
"wie muss sowas aussehen ?
ich vermute ich habe also ziemlich vieles falsch, da die anderen 5 fehlermeldungen mit objekten sich auf andere klassen beziehen.ich habe den fehler überall dort wo ich innerhalb der klasse X auf eine methode der klasse Y zuzugreifen
da bin ich wieder bei meinem alten problem.
wenn ich in main() eine methode der klasse Ingo aufrufen möchte, kann ich doch einfach:
Ingo Objekt;
Objekt.methode();machen.
Nur wenn ich innerhalb einer methode der Klasse Hans bin und dort die Methode der Klasse Ingo aufrufen möchte. Wie mache ich das ?
Wenn ich dort nun obiges reinschreibe, bekomme ich einen Fehler.
Daher dachte ich;
Ingo *Objekt;
Objekt->methode()
-
Smuji schrieb:
Nur wenn ich innerhalb einer methode der Klasse Hans bin und dort die Methode der Klasse Ingo aufrufen möchte.
Versuche erstmal, die Begriffe "Klasse" und "Instanz einer Klasse" auseinanderzuhalten.
Du möchtest die Methode für ein ganz bestimmtes Objekt (= Instanz der Klasse) aufrufen. Diese Instanz muss also in der Methode bekannt sein. Entweder du übergibst sie der Methode oder die Instanz wird als Member in der Klasse gehalten.
-
ich vermute ich habe viel bockmist getrieben. mit meinem buch komme ich auch nicht ganz weiter....
was ist denn ein Member ?
ich zeige mal einen ausschnitt wie ich z.b. mich in einen kurs/PV einschreiben möchte:
void Hochschule::einschreiben_kurs() { Fachbereich *objekt; // da ich nicht von Hochschule direkt in Studiengang springen möchte, sondern dies über die klasse Fachbereich machen möchte, erzeuge ich ein objekt der klasse Fachbereich. if (objekt->get_status() == 1) { // statusabfrage ob bereits in studiengang 1 ODER 2 eingeschrieben, falls nicht, kann ich mich auch in keinen kurs einschreiben objekt->set_kurs(); //diese methode erstellt wieder ein objekt der klasse studiengang, welche den student einschreibt } else if (objekt->get_status() == 2) { // mit else if gearbeitet, weil ja(siehe oben) bool nicht funktioniert hat objekt->set_kurs(); } else { cout << "Bitte zuerst in einen Studiengang wählen !!" << endl << endl; // ansonsten erst in studiengang einschreiben } }
aufjedenfall bekomme ich in Zeile 5 schon die eben genannte Fehlermeldung, wegen : (objekt->get_status() == 2)
-
Smuji schrieb:
Fachbereich *objekt; /* da ich nicht von Hochschule direkt in Studiengang springen möchte, sondern dies über die klasse Fachbereich machen möchte, erzeuge ich ein objekt der klasse Fachbereich.*/
Nee, das tust Du hier eben nicht!
Du definierst hier nur einen Zeiger, der auf ein Objekt der Klasse Fachbereich zeigen könnte, er tut es aber nicht!
-
hmm....
und wie würde es richtig aussehen ?!?
-
Na, zB.:
Fachbereich objekt; ... //Zugriff: objekt.get_status() ... //anstelle von objekt->get_status()
-
Wobei Bellis Antwort nur den Kompilerfehler entfernt.
Unsinnig bleibt das trotzdem.Fachbereich objekt; if (objekt.get_status() == 1) {
Wer soll denn da auf wundersame weise den Status zwischen Zeile 1 und 3 geändert haben?
-
Genau. Ich hatte in meinem letzten Post noch die Frage gestellt:
welcher Fachbereich soll das sein, es wurde keiner zugewiesen!
Diese Frage ist von dir bislang unbeantwortet. Was soll
Fachbereich objekt
denn sein? Ein generischer Fachbereich? Ein spezieller Fachbereich wie "Naturwissenschaften"?Was soll
objekt.get_status()
denn zurückliefern?! Das bleibt alles völlig unklar. Wieso erzeugst du dort überhaupt einen Fachbereich? Du müsstest dir doch eigentlich irgendwie die Fachbereich-Liste von der Hochschule holen können.
-
hey, erst nochmal vielen Dank für euren Einsatz.
Ich habe meinen Fehler gefunden.
Ich habe die ganze Zeit mit * und -> gearbeitet, weil mir auf die herkömmliche Art und Weise das Objekt immer rot unterstrichen wurde.
Ich konnte mir zwar nicht erklären, warum ich mit * und -> arbeite, aber das war die einzige Möglichkeit keinen roten Unterstrich zu bekommen.Nun war ich mal 'ne viertel Stunde an der Luft und tadaa, Fehler gefunden...für Fachbereich gibt es keinen Standardkontruktor.
Warum ?!? Weil ich ihn iwann gelöscht habe. Vermutlich weil ich ihn nicht benutzt habe. Also habe ich den Standardkonstruktor wiederhergestellt und siehe da, es klappt.
Ich dachte, wenn ich einen anderen Konstruktor habe, bräuchte ich den Standardkonstruktor nicht mehr und kann ihn löschen, um es übersichtlicher zu machen. Falsch gedacht.
Nun ja, ich mach dann mal weiter. Ich bin mir sicher, ihr werden nochmal von mir hören
-
Smuji schrieb:
Ich dachte, wenn ich einen anderen Konstruktor habe, bräuchte ich den Standardkonstruktor nicht mehr und kann ihn löschen, um es übersichtlicher zu machen. Falsch gedacht.
Logischerweise kannst du nicht das löschen, was gebraucht wird.
-
Smuji schrieb:
Ich habe meinen Fehler gefunden.
Du hast nur ein technisches Problem behoben. Die Frage bleibt immer noch, was der Code den eigentlich tun soll. Was soll das
get_status
bei einem default-konstuierten Fachbereich liefern? Und warum sollte es mal 1, mal 2 und mal noch was anderes ergeben?Es bringt nichts, so lange den Code zu ändern, bis er kompiliert, solange du dir nicht endlich Gedanken machst, wie das alles zusammenhängen soll.
-
also der code kompiliert schon. nur er funktioniert noch laaaaaange nicht
jetzt beginnt für mich erst das fehler ausmerzen bzw. das "in gang bringen".
nun kommt schon das erste problem.ich habe in der klasse etwas wie:
class Fachbereich { string bezeichnung; int studiengang = 0; ...
nun setzt mir meine einschreibmethode - > int studiengang = 1;
sobald die methode durchlaufen wurde und ich zurück in main() ankomme und mir dort zum test studiengang nochmal ausgebe, hat es wieder den wert = 0;
bleibt das nicht dauerhaft geändert ?
-
Ohne minimales, kompilierbares Codebeispiel schwer zu sagen, was du programmiert hast.
-
ok, ich will euch eigentlich keine alpträume machen mit meinem code, aber ich poste mal alles was ich bisher so geschrieben habe.
p.s. beachtet nicht so die kommentare, die sind zum teil noch von vor tagen und falsch, diese wollte ich wenn ich fertig bin noch verändern.
auch muss ich überprüfen ob nicht ein paar methoden überflüssig sind....
MAIN
#include "Header.h" #include "main.h" /*Erstelle folgende Klassen: Hochschule (Container für deine Fachbereiche, Methoden zum Hinzufügen und Entfernen von Fachbereichen) Fachbereich (Container für Studiengänge, Methoden zum Hinzufügen und Entfernen von Studiengängen) Studiengang (der spezifische Studiengang, Methoden zum Einschreiben ...) Student \201 => ü \204 => ä \224 => ö */ int main() { int auswahl = 0; int zähler = 0; Hochschule *objekt; Fachbereich hans; //test objekt = new Hochschule ("Technische Hochschule Mittelhessen"); // neue Hochschule erbaut Hochschule *thm[10]; // konstruktor NULL übergeben an beide werte und nur einer do { cout << objekt->get_name() << " - Studentenverwaltung:" << endl << endl; cout << "MENUE:" << endl << endl; cout << "\t 1 = In einen Studiengang einschreiben" << endl << endl; cout << "\t 2 = In einen Kurs einschreiben" << endl << endl; cout << "\t 3 = Noten des Kurses eintragen" << endl << endl; cout << "\t 4 = Ausgabe aller Studierenden" << endl << endl << endl; cout << "\t 5 = Nächster Student" << endl << endl << endl; cout << "Treffen Sie bitte jetzt Ihre Auswahl: " << endl << endl << endl; cin >> auswahl; cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl; switch (auswahl) { case 1: thm[zähler]->einschreiben_sg(); // öffne hochschule, methode einschreiben_sg break; case 2: thm[zähler]->einschreiben_kurs(); break; case 3: thm[zähler]->eintragen_note(); break; case 4: for (int i = 0; i <= zähler; i++) { thm[i]->ausgabe(); } break; case 5: zähler++; // status auf 0 setzen, kurse auf 0 setzen , anzahl fächer wieder 0 zähler, kurs 1-3 auf 0 setzen break; } } while ((auswahl > 0) && (auswahl < 6)); // cin.fail fehlerhafte eingabe cout << "Fehlerhafte Eingabe" << endl << endl; cout << "Programm beendet !!!" << endl << endl; system("pause"); return 0; }
HEADER:
#pragma once #include <iostream> #include <string> #include <ctime> // zeitverz. brauch ich nicht ? #include <windows.h> // für zeiterzögerung using namespace std; class Hochschule { string thm; public: Hochschule(string); // konstriktur string get_name(); // bruache ich das ?????????? void einschreiben_sg(); void einschreiben_kurs(); void eintragen_note(); void ausgabe(); }; //-------------------------------------------------------------- class Fachbereich { string bezeichnung; string aeb; // 1 string ti; // 2 int studiengang = 0; // status ob bereits eingeschrieben oder nicht 0 nein, 1 aeb , 2 ti FÜR AUSGABE public: Fachbereich(); Fachbereich(string, string, string); //konstruktor string get_bezeichnung(); // ausgabe WIllkommen in hochschule cpp int get_status(); // brauch ich für xterne abfrage, bevor man in kurs einschreibt, siehe hochschule, einschreiben_kurs void set_sg(); // student in aeb oder ti einschreiben studiengang void set_aeb(); // methode zum einschreiben und namen speichern void set_ti(); // methode zum einschreiben und namen speichern void set_kurs(); // weiterleitung zu studiengang, da dort die kurse hinterlegt sind string get_sg(); // rückgabe stduiengang }; //----------------------------------------------------------------- class Studiengang { string bezeichnung; int zähler = 0; // man darf max. 2 kurse belegen zähler string mathe1; // namen string swt1; // namen string swt2; // namen int kurs1 = 0; // status ob eingeschrieben int kurs2 = 0; int kurs3 = 0; //NOTEN int note_mathe1 = 0; // note hinterlegt int note_swt1 = 0; int note_swt2 = 0; public: Studiengang(); Studiengang(string, string, string); void set_bezeichnung(string); string get_bezeichnung(); void set_mathe1(); // status setzen, eintragen void set_swt1(); void set_swt2(); void set_note(); // note eintragen string get_kurs_note(); }; //---------------------------------------------------------------- class Student { string name; int status = 0; // wenn noch keine student ... wenn student dann 1 //NEW STUDENT BEI EINCHRIEBEN public: Student(); Student(string); void set_status(); int get_status(); void set_name(); string get_name(); };
CPP
#include "Header.h" Hochschule::Hochschule(string x) // Konstr. wird in main() aufgerufen und THM erhält Namen { thm = x; } string Hochschule::get_name() { // in main() Ausgabe Überschrift return thm; } void Hochschule::einschreiben_sg() { // erstellt neuen FB, übergibt Konstr. FB,AEB,TI und öffnet das Einschreiben in SG Fachbereich *objekt; objekt = new Fachbereich("Informationstechnik - Elektrotechnik - Mechatronik", "Allgemeine Elektrotechnik Bachelor", "Technische Informatik"); cout << "Willkommen in: \t\t" << objekt->get_bezeichnung() << endl << endl << endl << endl; // holt FB-Bezeichnung und Ausgabe objekt->set_sg(); // öffnet das Einschreiben in Studiengang } void Hochschule::einschreiben_kurs() { Fachbereich objekt; if (objekt.get_status() == 1) { // statusabfrage ob bereits in studiengang 1 ODER 2 eingeschrieben objekt.set_kurs(); // dann öffne einschreiben } else if (objekt.get_status() == 2) { objekt.set_kurs(); } else { cout << "Bitte zuerst in einen Studiengang w\204hlen !!" << endl << endl; // ansonsten erst in studiengang einschreiben } } void Hochschule::eintragen_note() { // naja, besser malal Studiengang objekt; objekt.set_note(); } void Hochschule::ausgabe() { Fachbereich objekt1, objekt2; Student objekt3; Studiengang objekt4; cout << "\201bersicht aller Studenten, Studiengänge, Kurse und Noten;" << endl << endl << endl << endl; cout << "Fachbereich: " << objekt1.get_bezeichnung() << endl << endl; cout << "Student: " << objekt3.get_name() << endl << endl; cout << "Studiengang: " << objekt2.get_sg() << endl << endl; cout << "Kurse und Noten: " << objekt4.get_kurs_note() << endl << endl; } //-------------------------------------------------------------------------------------------- Fachbereich::Fachbereich(){ } Fachbereich::Fachbereich(string x, string y, string z) // konstruktor darf nicht 0 setzen, sonst bei jedem objekt erzeugen wieder = 0 { bezeichnung = x; aeb = y; ti = z; } string Fachbereich::get_bezeichnung() { // für die Ausgabe "Willkomen in IEM" return bezeichnung; } int Fachbereich::get_status() { // für abfrage VOR kurs einschreiben, ob überhaupt schon in studiengang return studiengang; } void Fachbereich::set_kurs() { // auswahl studiengang int auswahl; Studiengang objekt; if (studiengang == 1) { // wenn in AEB, dann swt1 mathe 1 cout << "Sie befinden sich im Studiengang Allgemeine Elektrotechnik" << endl << endl; cout << "Sie k\224nnen sich nun in folgende Kurse w\204hlen: " << endl << endl; cout << "\t\t\t\t 1 = Mathe 1" << endl << endl; cout << "\t\t\t\t 2 = SWT 1" << endl << endl; cout << "Bitte w\204hlen Sie eine Nummer aus:" << endl << endl; cin >> auswahl; switch (auswahl) { case 1: objekt.set_mathe1(); break; case 2: objekt.set_swt1(); break; } cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl; } else if (studiengang == 2) { // wenn in TI, dann swt1, swt2 und mathe 1 cout << "Sie m\224chten sich in einen Kurs einschreiben." << endl << endl; cout << "Bitte w\204hlen Sie eine Nummer aus:" << endl << endl; cout << "\t\t\t\t 1 = Mathe 1" << endl << endl; cout << "\t\t\t\t 2 = SWT 1" << endl << endl; cout << "\t\t\t\t 3 = SWT 2" << endl << endl; cin >> auswahl; switch (auswahl) { case 1: objekt.set_mathe1(); break; case 2: objekt.set_swt1(); break; case 3: objekt.set_swt2(); break; } cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl; } else { cout << " IRGENDWAS STIMMT MIT DER EINSCHREIBUNG IM STUDIENGANG NICHT, versuchen erneneutuueuuuuufufufufuf" << endl; system("pause"); } } void Fachbereich::set_sg() { // in Studiengang einschreiben int auswahl = 0; if (studiengang == 0) { // wenn studiengang = 0, ist noch kein studiengang gewählt und man kann sich einschreiben cout << "Sie m\224chten sich in einen Studiengang einschreiben." << endl << endl; cout << "Bitte w\204hlen Sie eine Nummer aus:" << endl << endl; cout << "\t\t\t\t 1 = AEB" << endl << endl; cout << "\t\t\t\t 2 = TI" << endl << endl; cin >> auswahl; cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl; switch (auswahl) { case 1: set_aeb(); // öffnet das dortige Einschreiben cout << " Sie haben sich erfolgreich in " << aeb << " eingeschrieben." << endl << endl; cout << studiengang; break; case 2: set_ti(); // öffnet das dortige Einschreiben cout << " Sie haben sich erfolgreich in " << ti << " eingeschrieben." << endl << endl; break; } // ausgabe EINGESCHRIEBEN !!!! mit verzögerung ausgabe } else { cout << "Sie sind bereits in einen Studiengang eingeschrieben !!!" << endl << endl; // falls studiengang = 1 oder 2, ist schon eingeschrieben } } void Fachbereich::set_aeb() { // einschreiben in aeb öffnen konstruktor student und übergeben name udn setzen status 1 in stud und 1 in fachbere Student *neu; string eingabe; cout << "Sie m\224chten sich einschreiben in " << aeb << endl << endl; cout << "Geben Sie bitte Ihren Vor- und Nachnamen ein: " << endl << endl; cin >> eingabe; neu = new Student(eingabe); // wenn status = 0 -> kein student, 1 -> student name schon gesetzt cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl; studiengang = 1; // aeb ist 1 neu->set_status(); } void Fachbereich::set_ti() { Student *neu; string eingabe; cout << "Sie m\224chten sich einschreiben in " << ti << endl << endl; cout << "Geben Sie bitte Ihren Vor- und Nachnamen ein: " << endl << endl; cin >> eingabe; neu = new Student(eingabe); cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl; studiengang = 2; neu->set_status(); } string Fachbereich::get_sg() { if (studiengang == 1) { return aeb; } else if (studiengang == 2) { return ti; } else { return "leer"; // darf eigentlich nie vorkommen } } //-------------------------------------------------------------------------- Studiengang::Studiengang() { } Studiengang::Studiengang(string x, string y, string z) //Konstruktor mit übergabe status { mathe1 = x; swt1 = y; swt2 = z; } string Studiengang::get_bezeichnung() { return bezeichnung; } void Studiengang::set_bezeichnung(string y) { bezeichnung = y; return; } void Studiengang::set_mathe1() { // ich muss namen nicht überprüfen, da es vorher schon gemacht wird Student objekt; if (zähler < 2) { cout << "Willkommen " << objekt.get_name() << "in " << mathe1 << endl << endl; cout << "Sie werden nun eingeschrieben" << endl << endl; // zeitverzögerung kurs1 = 1; cout << "Sie belegen nun den Kurs " << mathe1 << "Viel Erfolg !" << endl << endl; zähler++; } else { cout << "Sie d\201rfen sich leider nur in 2 Kurse einschreiben" << endl << endl; system("pause"); } } void Studiengang::set_swt1() { Student objekt; if (zähler < 2) { cout << "Willkommen " << objekt.get_name() << "in" << swt1 << endl << endl; cout << "Sie werden nun eingeschrieben" << endl << endl; // zeitverzögerung kurs2 = 1; cout << "Sie belegen nun den Kurs" << swt1 << "Viel Erfolg !" << endl << endl; zähler++; } else { cout << "Sie d\201rfen sich leider nur in 2 Kurse einschreiben" << endl << endl; system("pause"); } } void Studiengang::set_swt2() { Student objekt; if (zähler < 2) { cout << "Willkommen " << objekt.get_name() << "in " << swt2 << endl << endl; cout << "Sie werden nun eingeschrieben" << endl << endl; // zeitverzögerung kurs3 = 1; cout << "Sie belegen nun den Kurs " << swt2 << "Viel Erfolg !" << endl << endl; zähler++; // damit man max. 2 kurse belegen kann } else { cout << "Sie d\201rfen sich leider nur in 2 Kurse einschreiben" << endl << endl; system("pause"); } } void Studiengang::set_note() { int note; int auswahl; int rückgabewert; Fachbereich objekt; rückgabewert = objekt.get_status(); if (rückgabewert == 1) { // wenn AEB eingetragen cout << "Sie m\224chten eine Note eintragen." << endl << endl; cout << "Bitte w\204hlen Sie den Kurs: " << endl << endl; cout << "\t\t\t\t 1 = Mathe 1" << endl << endl; cout << "\t\t\t\t 2 = Swt 1" << endl << endl; cin >> auswahl; switch (auswahl) { case 1: if(kurs1 == 1){ //wenn kurs1_status, dann mathe1 eintragen cout << "Welche Note soll eingetragen werden ?" << endl << endl; cin >> note; note_mathe1 = note; } else { cout << "Kurs wurde nicht belegt" << endl << endl; } break; case 2: if (kurs2 == 1) { //wenn kurs2_status, dann swt11 eintragen cout << "Welche Note soll eingetragen werden ?" << endl << endl; cin >> note; note_swt1 = note; } else { cout << "Kurs wurde nicht belegt" << endl << endl; } break; } } else if (rückgabewert == 2) { //TI eingeschrieben ?? cout << "Sie m\224chten eine Note eintragen." << endl << endl; cout << "Bitte w\204hlen Sie den Kurs: " << endl << endl; cout << "\t\t\t\t 1 = Mathe 1" << endl << endl; cout << "\t\t\t\t 2 = Swt 1" << endl << endl; cout << "\t\t\t\t 3 = Swt 2" << endl << endl; cin >> auswahl; switch (auswahl) { case 1: if (kurs1 == 1) { //wenn kurs1_status, dann mathe1 eintragen cout << "Welche Note soll eingetragen werden ?" << endl << endl; cin >> note; note_mathe1 = note; } else { cout << "Kurs wurde nicht belegt" << endl << endl; } break; case 2: if (kurs2 == 1) { //wenn kurs2_status, dann swt1 eintragen cout << "Welche Note soll eingetragen werden ?" << endl << endl; cin >> note; note_swt1 = note; } else { cout << "Kurs wurde nicht belegt" << endl << endl; } break; case 3: if (kurs3 == 1) { //wenn kurs3_status, dann swt2 eintragen cout << "Welche Note soll eingetragen werden ?" << endl << endl; cin >> note; note_swt2 = note; } else { cout << "Kurs wurde nicht belegt" << endl << endl; } break; } } else { cout << "Sie sind weder in einem Studiengang, noch in einem Kurs eingeschrieben" << endl << endl; } } string Studiengang::get_kurs_note() { if (kurs1 == 1) { // Mathe 1 mit Note cout << mathe1; if (note_mathe1 != 0) { cout << note_mathe1; } else { cout << "keine Note"; } } if (kurs2 == 1) { // Swt1 mit Note cout << swt1; if (note_swt1 != 0) { cout << note_swt1; } else { cout << "keine Note"; } } if (kurs3 == 1) { // Swt2 mit Note cout << swt2; if (note_swt2 != 0) { cout << note_swt2; } else { cout << "keine Note"; } } else { return "keine Kurse und keine Noten"; } } //-------------------------------------------------------------------------- Student::Student() { } Student::Student(string x) { name = x; } string Student::get_name() { // bei der Ausgabe benötigt if (status == 1) { return name; } else { return "leer"; } } void Student::set_name() { return; } void Student::set_status() { // status auf eins, damit andere wissen, name steht schon status = 1; } int Student::get_status() { return status; }
-
Naja, du erzeugst in fast allen Funktionen neue Objekte irgendeiner Klasse. Diese Objekte werden nach den Funktionen jeweils zerstört. Wenn du die nicht zu Beispiel in Member Variablen speicherst, kannst du auf die nicht aus anderen Funktionen drauf zugreifen.
Ausführlicheres Feedback kann ich grade nicht geben, da ich nur am Smartphone sitze und das lesen und schreiben so etwas mühselig ist.