In einer Methode einer Klasse die Methode einer anderen Klasse aufrufen ?



  • Hallo,

    ich arbeite gerade an einem Programm zur Verwaltung von Studenten etc.

    Ich habe nun 2 Klassen mit ihren Methoden:

    **
    int Hochschule::einschreiben() {

    int auswahl;

    cout << "Geben Sie was ein" << endl;

    cin >> auswahl;

    switch (auswahl) {
    case 1:
    AEB::einschreiben_aeb(); <--- Methodenaufruf ??????
    break;
    **

    und die andere klasse namens "AEB" enthält die funktion "einschreiben_aeb()"

    in der header habe ich nun geschrieben:

    class AEB : public Hochschule

    nun sollte doch die klasse "Hochschule" die methode "einschreiben_aeb()" aufrufen können. nur wie mache ich das ?

    so wie gerade, erhalte ich die fehlermeldung:

    Fehler C2352 "AEB::einschreiben_aeb": Unzulässiger Aufruf einer nicht statischen Memberfunktion Hochschule

    wie genau löse ich das problem ?

    grüße smuji



  • Smuji schrieb:

    int Hochschule::einschreiben() {  
    
    	int auswahl;
    
    	cout << "Geben Sie was ein" << endl;
    	
    	cin >> auswahl;
    
    	switch (auswahl) {
    	case 1:
    		AEB::einschreiben_aeb();  // <--- Methodenaufruf ??????
    		break;
    

    Zum Aufrufen einer Funktion brauchst du ein Objekt z.B.:

    Hochschule aeb;
    aeb.einschreiben();
    

    Alternativ kannst du die Funktion statisch machen, dann kannst du sie mit

    Hochschuke::einschreiben();
    

    auch ohne Instanz aufrufen. Selbstverständlich müssen die Funktionen dann öffentlich (publlic) sein.

    So wie der Code jetzt dort steht ergibt er keinen Sinn.



  • class AEB : public Hochschule
    

    Warum? Was ist AEB?



  • Hallo,

    danke erstmal.

    ja, der code macht noch keinen sinn, da ich nur ausschnitte hier gepostet habe und arbeite ja noch dran. wollte nur den schritt mit dem aufruf schonmal vorzeitig ausprobieren, da ich mir unsicher war und mir ist dann der fehler aufgefallen.

    aeb bedeutet allgemeine elektrotechnik bachelor

    es geht mir lediglich darum, WIE ich eine methode der klasse AEB innerhalb einer methode der klasse hochschule aufrufen kann.

    den tipp mit:

    Hochschule aeb;
    aeb.einschreiben();

    verstehe ich nicht, denn die methode selbst heißt ja einschreiben (selbstaufruf ??)

    ich will die methode einschreiben**_aeb**() aufrufen, falls du dich nur verschrieben hast und meintest:

    Hochschule aeb;
    aeb.einschreiben_aeb();

    das habe ich nämlich auch ausprobiert, da aber einschreiben_aeb eine methode der klasse AEB ist, funktioniert der aufruf wegen Hochschule aeb nicht.

    Fehlermeldung:

    Fehler (aktiv) E0135 "class "Hochschule"" hat keinen Member ""einschreiben_aeb"".

    Fehler C2039 "einschreiben_aeb": Ist kein Element von "Hochschule"

    das mit dem "Alternativ kannst du die Funktion statisch machen" habe ich auch schon probiert, hatte aber nicht funktioniert.

    EDIT:

    ich weiß auch warum, weil ich die methode einschreiben() mit der methode einschreiben_aeb() verwechselt habe und somit die falsche statisch gemacht habe 🙂 nun gehts 🙂

    danke, aber trotzdem würde mich dein erstes lösungsansatz noch interessieren 🙂



  • aeb bedeutet allgemeine elektrotechnik bachelor

    Und das ist eine Hochschule? Wohl eher nicht.



  • die sache ist, wir sollen lernen basisklassen und abgeleitete klassen zu erstellen und dies dann per UML darzustellen. hochschule soll die "hauptklasse" sein...wir haben die vorgabe wieviele und welche klassen wir erstellen sollen, damit man am ende daraus ein UML-diagramm zeichnen kann. man könnte das ganze programm kleiner und leichter gestalten, aber ich vermute wir sollen extra so viele klassen erstellen, damit wir danach beim UML-diagramm ein bisschen "mehr arbeit" haben.

    ich habe nun den obigen schritt bei anderen klassen wiederholt

    HEADER:

    class Student : public AEB
    {
    	static string name_st;
    
    public:
    	Student();
    
    	static int set_name(string);
    	string get_name();
    
    };
    
    class AEB : public Hochschule  // muss MATHE1 erben, da beide diese klausur schreiben
    {
    	string name_aeb;
    	string mathe1;
    	string swt1;
    	int note;
    
    public:
    	AEB(string, string, string);
    
    	static int einschreiben_aeb();
    
    };
    

    CPP:

    int AEB::einschreiben_aeb() {
    
    	string eingabe;
    
    	cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;
    	cout << "Willkommen im Fachbereich: Allgemeine Elektrotechnik" << endl << endl << endl;
    	cout << "Um sich in diesen FB einzuschreiben, geben Sie bitte ihren Vor- und Nachnamen ein:" << endl << endl;
    	cin >> eingabe;
    
    	Student::set_name(eingabe);
    
    	return 0;
    
    }
    
    int Student::set_name(string x) { // noch nachname in konstruktor
    
    	name_st = x;
    
    	return 0;
    }
    

    wenn ich das nun so übersetzen will, sagt mir mein VS immer :

    Fehler C2504 "AEB": Basisklasse undefiniert Hochschule

    was genau will VisualStudio von mir ?



  • Deine ganzen Annahmen in deinem Code sind falsch.

    Student ist keine AEB; AEB ist keine Hochschule und Student ist auch keine Hochschule. Die Vererbungshirarchie macht so keinen Sinn.

    Warum jetzt ein Kurs von einer Klausur bzw. einem völlig anderen Kurs erben muss erschließt sich mir auch nicht (in Bezug auf deinen Kommentar).



  • was genau will VisualStudio von mir ?

    Vermutlich hast du hochschule.h nicht inkludiert.
    Oder da läuft irgendeine KI, die dich vor deiner unsinnigen Ableiterei schützen will. 😉



  • Jockelx schrieb:

    Oder da läuft irgendeine KI, die dich vor deiner unsinnigen Ableiterei schützen will. 😉

    👍



  • wir sollen lernen basisklassen und abgeleitete klassen zu erstellen

    Ohne den Sinn dahinter zu verstehen ist das nutzlos. Da hilf es auch nicht, wenn man das Ganze noch in einem UML Diagramm malt.

    Ich habe aber die leise Hoffnung, dass du da etwas missverstanden hast und du nicht alles von allem ableiten sollst. Ansonsten lernst du in dem Kurs genau nichts.



  • Um die dennoch einen gedanklichen Einstiegspunkt zu bieten:

    • erstelle eine Klasse "Person" (dient als Basis für Studenten und Dozenten)
    • erstelle eine Klasse "Student" die von "Person" erbt
    • erstelle eine Klasse "Docent" die von "Person" erbt
    • erstelle eine Klasse "Course" (basis für Studiengänge; ob Vererbung notwendig ist weiß ich noch nicht)
    • erstelle eine Klasse University

    Die Klassen sinnvoll verstrickt und mit entsprechender Funktionalität versehen sollten dir schon weiterhelfen.



  • Erstmal vielen Dank an euch !!! Super Forum hier!

    Die Aufgabenstellung lautet:

    - Eine Hochschule besteht aus einer Anzahl von Fachbereichen
    - ein FB offeriert 2 Studiengänge, die zur Laufzeit(Heap) erstellt werden sollen
    - Studierende können sich an genau einem Studiengang einschreiben. Zur Laufzeit soll der Nutzer durch Eingabe eines Namens ein neues Objekt der Klasse Student erzeugen. Der Name soll ein Attribut der Klasse Student sein.
    - Ein Studiengang umfasst maixmal 2 Pflichtvorlesungen, die von Studierenden belegt werden können. Die Belegung der PV soll ebenfalls durch Benutzereingabe möglich sein. Darüber hinaus soll jede PV einen Noteneintrag (Attribut Note vom Typ Integer) möglich sein.

    Folgende Randbedingungen gelten:

    - Es braucht nur ein FB erstellt werden
    - Dieser FB besteht aus 2 Studiengängen (AEB und TI)
    - Ermöglichen Sie das Einschreiben von Studierenden an genau einem Studiengang
    - Ermöglichen Sie das Belegen von jeweils max. zwei PV für einen Studierenden (TI=swt2, math1) und (AEB=swt1, math1)
    - Ermöglichen Sie die Eingabe Note pro PV für einen Studierenden
    - Einfache Ausgabe der Studierenden mit Zuordnung des Studiengangs, PVs und Noten.

    Nun muss ich mir ja erstmal überlegen wieviele Klassen brauche ich:

    - Hochschule
    - Fachbereich
    - Student

    Jetzt würde ich 2 Klassen AEB und TI noch erstellen, welche die Fächerbezeichnungen und Noten als Attribute enthalten ?!? Oder wie soll ich die Klassen wählen ?

    Mir kommen die Fragen auf:

    Für was eine Klasse Hochschule ? Attribute enthält sie ja keine, also nur für die entsprechenden Funktionsaufruf und die entsprechendenen cout's nutzen ?

    Wenn die Klasse Student den Namen der Studenten als Attribut enthalten soll, müssen ja die Klassen Fachbereich bzw. die Studiengänge von dieser Klasse erben.

    Brauche ich eine Klasse Fachbereich , wenn ich nur einen einzigen habe ?

    Soll ich die Kurse/Fächer als Klasse schreiben, welche die Noten als Attribute enthalten ?



  • Jetzt würde ich 2 Klassen AEB und TI noch erstellen,

    Warum Klassen?



  • Weil ich in AEB und TI als Klasse, die Attribute Fächer und Noten geschrieben hätte ?!?



  • Eine Klasse Studiengang und zwei Objekte dieser Klasse.



  • Smuji schrieb:

    Weil ich in AEB und TI als Klasse, die Attribute Fächer und Noten geschrieben hätte ?!?

    Was ist eine Klasse? Was ist ein Objekt?



  • Was ich mich aktuell immer noch frage... laut TE geht es um Vererbung. In der Aufgabenstellung sehe ich keine Gründe für Vererbung. Übersehe ich etwas?



  • Nun ja, eine Klasse ist etwas ähnliches wie eine Struktur

    ein Objekt wird erstellt. bzw. ein Objekt "erweckt diese zum Leben", da eine Klasse ohne objekte nicht nutzbar ist. eine klasse ist sozusagen sowas ähnliches wie ein datentyp...vom funktionsprizip her.

    Klasse Hans
    Private:
    Attribute

    Public:
    Methoden

    und das Objekt erstellt sozusagen eine Instanz der Klasse

    bsp. in main(): Hans objekt verglichen mit einer variablen vom typ integer, ist das objekt vom typ der klasse Hans. ich hoffe dass ich es einigermaßen richtig erklärt habe....verwechsel noch oft die worte attribut, variable, methode, funktion etc.

    @ schlangenmensch..... stimmt, daran habe ich noch garnicht gedacht.
    du meinst:

    Studiengang aeb und Studiengang ti ?

    fur was brauche ich dann den fachbereich als klasse ?

    schreibe ich dann in die klasse studiengang auch die noten und fächer ?

    EDIT:

    @inflames2k: es besteht vermutlich keine notwenigkeit zur vererbung, da wir aber in den UMLs auch lernen sollen mit vererbung etc. umzugehen und da wir in vorherigen aufgaben mit vererbungen gearbeitet haben, wäre es sinnvoll dieses zum verfestigen weiterhin zu nutzen, wenn es sinn macht



  • Smuji schrieb:

    fur was brauche ich dann den fachbereich als klasse ?

    schreibe ich dann in die klasse studiengang auch die noten und fächer ?

    Weil jede Hochschule mehrere Fachbereiche haben kann, die aus verschiednenen Studiengängen besteht.
    Zum Beispeil
    Uni XYZ:
    Fachbereiche: Naturwissenschaften, Geisteswissenschafte
    FB Naturwissenschaften hat die Studiengänge:
    Mathematik, Physik
    Der Studiengang Mathematik hat die Pflichtvolesungen (Fächer):
    Lineare Algebra und Analysis

    Ich kenn kein Fach, welches Noten hat. Der Student, der den Studiengang belegt hat eine Note in dem Fach.



  • Danke ich komme der Sache schon näher.

    - Eine Hochschule besteht aus mehreren (hier nur 1) Fachbereichen

    ....das heißt, HOCHSCHULE ist keine Klasse, sondern nur die einzelnen Fachbereiche stellen Klassen da (hier nur eine). Alle Fachbereiche sind meine Hochschule, sollen aber nicht in einer Klasse Hochschule gebündelt werden, da es sowieso keine Attribute in dieser Klasse Hochschule gäbe.

    -Ein FB offeriert 2 Studiengänge, die zur Laufzeit (Heap) erstellt werden.

    .... das heißt, die einzelnen Studiengänge werden Objekte/Instanzen der Klasse Fachbereich.

    - ein studiengang umfasst max. 2 PVs, die belegt werden können und auch Noteneintragungen zu diesen sollen möglich sein.

    .... das heißt PVs und Noten sind auch Attribute der Klasse Fachbereich ?

    - Es soll eine Klasse Student erstellt werden, welche den Namen der Stundenten als Attribut enthält.

    ... also erbt fachbereich von Student, um den Namen dort zu hinterlegen ? Oder einfach mit hilfe von get- bzw- setmethoden die attribute "schreiben".

    Die Frage ist, wenn ich das so mache, dann habe ich ja nur 2 Klassen ( Fachbereich und Student) ???!?


Log in to reply