Vererbte Klassen Überladen miteinander ausgeben?!



  • Hallo zusammen

    wir haben eine Hausübung bekommen, die ich auch bis jetzt ohne Probleme geschaft habe, nur, bei der letzten überladung von cout hab ich gerade wirklich 0 (NULL) Plan wie ich das nun anstellen soll.

    das Programm vom Aufbau her wurde von unserem Prof. vorgegeben (also Funktionen, Parameter usw.)

    #include <iostream>
    using namespace std;
    
    class Date
    {
    	int day, month, year;
    public:
    		Date(int d, int m, int y)
    		{
    			day=d;
    			month=m;
    			year=y;
    		}
    		Date()
    		{
    			day=0;
    			month=0;
    			year=0;
    		}
    		void setDATE(int d, int m, int y)
    		{
    			if(d>0)day=d;
    			if(m>0)month=m;
    			if(y>0)year=y;
    		}
    		friend ostream & operator << (ostream &os, Date &D)
    		{
    			return os<<D.day<<"."<<D.month<<"."<<D.year<<endl;
    		}
    		 friend istream& operator>>(istream& is, Date& D)
    		{
    			int x;
    			cout<<"Day: ";
    			cin>>x;
    			D.day=x;
    			cout<<endl;
    			cout<<"Month: ";
    			cin>>x;
    			D.month=x;
    			cout<<endl;
    			cout<<"Year: ";
    			cin>>x;
    			D.year=x;
    			cout<<endl;
    			return is;
    		}
    
    };
    class Person
    {
    protected:
    	Date dob;
    	int s; //0 = "female"   1 = "male"
    private:
    	char *name, *nation;
    public:
    	Person(char *n, char *nat, int h, int d, int m, int y)
    	{
    		name=new char[strlen(n)];
    		nation=new char[strlen(nat)];
    		strcpy(name, n);
    		strcpy(nation, nat);
    		s=h;
    		dob.setDATE(d,m,y);
    	}
    	Person()
    	{
    		name=new char[2];
    		nation=new char[2];
    		strcpy(name, " ");
    		strcpy(nation, " ");
    		s=1;
    		dob.setDATE(0,0,0);
    	}
    	friend ostream & operator << (ostream &os, Person &P)
    	{
    		return os<<"Name: "<<P.name<<"  Nation: "<<P.nation<<"  Geschlecht: "<<P.s<<endl;
    	}
    };
    class Student:public Person
    {
    	Date mathreculation;
    	char *Schule;
    	int status;
    public:
    	Student(char *name, char *nation, int ges, char * shool, int d, int m, int y, int stat) //d,my Date of mathreculation
    	{
    		Person::Person(name, nation, ges, d, m, y);
    		Schule=new char[strlen(shool)];
    		strcpy(Schule, shool);
    		status=stat;
    	}
    	int setDOB(int d, int m, int y)
    	{
    		dob.setDATE(d,m,y);	
    	}
    	void setDOM(int d, int m, int y)
    	{
    		mathreculation.setDATE(d,m,y);
    	}
    	void setSEX(int x)
    	{
    		Person::s=x;
    	}
    	friend ostream & operator << (ostream &os, Student &S)
    	{
    
    	}
    };
    
    int main()
    {
     	Date Me(10,5,1992);
    	Person Ich("Max Mustermann", "Österreich", 1, 11, 11, 1992);
    	//cin>>Me;   -> geht
    	cout<<Me;
    	cout<<Ich;
    	Student I ("Max Mustermann", "Österreich", 1, "htl", 10, 5, 1992, 1);
    	cout<<I;
    	system("Pause");
    
    }
    

    in Zeile 105 sollte ich ausgeben: Name, Nationalität, Geb Datum (dob), Schule (kleinste Problem), status (dito), dom (austrittsdatum, glaub ich ^^) und geschlecht (s)

    problem ist, ich habe keine ahnung wie ich das mache 😕

    wenn es evtl nur eine oder zwei Zeilen wären, wäre es supa wenn ihr mir die hinschreiben könnt, und evtl wenn ihr zeit dazu habt ganz ganz kurz erläutert wie das geht 🙂

    Vielen Dank im Vorraus

    Fanati_c



  • Schau doch mal in Person nach. Dort wird ja fast genau das gemacht, was du brauchst.



  • ja, aber wie bring ich das runter? kapier grad nix 😞



  • Dan lies den Stoff nochmal durch, wenn du keine Ahung von Programmierung hast.. 🙄

    Und sonst lass es bleiben. Hausaufgaben machen für dich nicht. Vor allem nicht, wenn sie so extrem einfach sind..

    btw:
    Wenn der Code von deinem Prof. ist, dann sollte man ihn aber auch hauen..
    Wenn ich mich an Halloween als Codestück verkleiden müsste, dann würde das wahrscheinlich in etwa so wie der Code da aussehen..



  • eh, ich kann Programmieren, hatte ne 1 ja, aber ich komm net drauf mehr wie ich das da runter bring, außerdem war ich an dem tag mit vererbung etc net da....

    außerdem muss ich ja nicht alles auf anhieb kapiern <.< bin ja auch nur ein mensch und net perfekt, wenns für dich einfach is schön, ich habs noch net gmacht....



  • Ok, tut mir leid. Habe etwas forsch reagiert. Kommen eben sehr viele Leute, die wollen, dass wir ihre Hausaufgaben machen..

    Aber der Code ist auch so Mist.

    Student(char *name, char *nation, int ges, char * shool, int d, int m, int y, int stat) //d,my Date of mathreculation
    		:
    	Person ( name, nation, ges, d, m, y ) // richtig, sonst wird die Basisklasse gar nicht mit den korrekten Parametern initialisiert
        {
            //Person::Person(name, nation, ges, d, m, y); // das ist bullshit. Da wird nicht die Basiklasse initialisiert, sondern ein anderes Objekt..
            Schule=new char[strlen(shool)]; // Mist, da nirgends Speicher frei gegeben wird.. (gilt auch bei den anderen strings..)
            strcpy(Schule, shool);
            status=stat;
        }
    

    Ausgeben kannst du den Stutenten, indem du eine Referenz auf ihn in eine Referenz auf eine Person castest. Anderst kommst du an den Namen und Nation nicht ran.. (Üblicherweise würde man da getter haben, damit man drauf zugreifen kann, aber so, wie das da gewollt ist ist das einfach nur Mist..)



  • danke dir habs gelöst

    ich sag nur eins

    Memberinitialisierungsliset 😃


Anmelden zum Antworten