PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schulaufgabe in C++ über Klassen



Nikkita
08-09-2003, 12:58
Hi Leute also ich komm da mit denn klassen einfach nicht zu recht könnt ihr mir sagen was ich da falsch mache. :rolleyes:

Hier poste ich mal die Aufgabe:

Erzeugen Sie eine Klasse TPerson, die folgende Eigenschaften haben soll:
Name, Vorname, E-Mail-Adresse, Geburtsjahr, Geburtsmonat, Geburtstag

Die Datentypen der Eigenschaften können Sie selbst bestimmen.

Die Klasse soll folgende Methoden (Elementfunktion) beinhalten.

void setName(AnsiString Name, AnsiString Vorname);
void setGeburtsdatum(int Tag, int Monat, int Jahr);
AnsiString getName();
int getAlter(int Tag, int Monat, int Jahr);

Die Methode gelAtler soll das Alter einer Person zurückgeben, das aus dem übergebenen Datum (z. B. aktuelles Tagesdatum) berechnet wird.

Beispiel

TPerson Schueler;
Schueler.setName("Duck","Donald");
Schueler.setGeburtsdatum(13,2,1980);
int Alter = Schueler.getAlter(10,1,2003); //Alter müsste den Wert 22 enthalten.


So ich poste noch mein code und ich weiss einfach nicht was ich machen soll :///


//---------------------------------------------------------------------------
#include <iostream>
#include <vcl.h>
#pragma hdrstop
#include <conio>

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
class TPerson
{
public:
void setName(AnsiString Name, AnsiString Vorname);
void setGeburtsdatum(int Tag, int Monat, int Jahr);
AnsiString getName();
int getAlter(int Tag, int Monat, int Jahr);
};


int TPerson::setGeburtsdatum()
{
return getAlter;
}


void TPerson::getAlter(int age)
}
getAlter = age;
{

int main()
{
/*
TPerson Schueler;
Schueler.setName("Duck","Donald");
Schueler.setGeburtsdatum(13,2,1980);
int Alter = Schueler.getAlter(10,1,2003);
cout << Schueler.getAtler()<< " ";
return 0;
*/
TPerson Frisky;
Frisky.setAlter(5);
cout << "Frisky ist eine Katze, die " ;
cout << Frisky.getAlter() << " Jahre alt ist.\n";
return 0;
}


}












return 0;
}
//---------------------------------------------------------------------------

TrollSlayer
08-09-2003, 14:11
1. Erstmal wäre es nicht schlecht finde ich wenn du die Klasse außerhalb der main-Methode deklarierst. ;) Außerdem sollte ein Programm nur eine main-Methode haben ;) .
2. In der Aufgabenstellung steht doch:


Erzeugen Sie eine Klasse TPerson, die folgende Eigenschaften haben soll:
Name, Vorname, E-Mail-Adresse, Geburtsjahr, Geburtsmonat, Geburtstag

Diese sind in deiner Klasse gar nicht enthalten. :confused: Die Klasse müßte etwa so aussehen:


class TPerson {
/* Attribute: */
private:
char *name; // oder AnsiString name;
/* usw. */
public:
/* Methoden: */
void setName(AnsiString name, AnsiString vorname);
/* usw... */
};

Dann kommen die Methoden. Die Methoden-Deklarationen sehen schon mal brauchbar aus. Aber die Implementierung... Es scheint mir daß du mit den Grundlagen von c++ nicht besonders vertraut bist, oder? Die geter-Methoden sollen Attribute/Eigenschaften des Objekts zurückgeben. Eine getName() Methode müßte etwa so aussehen:


AnsiString TPerson::getName() {
return(name);
}

Die set-er-Methoden sollen die Attribute mit Werten belegen:


void TPerson::setGeburtsdatum(int tag, int monat, int jahr) {
this.tag = tag;
this.monat = monat;
this.jahr = jahr;
}


PS: Außerdem finde ich dieses Deutsch-Englisch-Gemisch bei den Methoden- und Variablennamen schrecklich. ;)

tuxipuxi
08-09-2003, 15:57
hi,

ich habe mal eine kleine, etwas saubere, version geschrieben. gibt methoden zum setzen und lesen des namens und geburtstags, den rest wirst du mit meiner vorlage sehr leicht implementieren koennen.

falls du teile deines codes von deinem informatiklehrer hasst, frag ihn mal bitte fuer mich was #include <vcl.h> und die verwendung von AnsiString soll.

der code:




#include <iostream>
#include <sstream>
#include <string>

using namespace std;


class TPerson {

public:

TPerson( const char*, const char*, int, int, int );
TPerson( int, int, int );
TPerson( const char*, const char* );

void setName( const char*, const char* );
void setBirthday( int, int, int );

string getName();
string getBirthday();


string chr_name,sr_name;
int day,month,year;


};


TPerson::TPerson( const char* sr_name, const char* chr_name, int day, int month, int year ) {

this->sr_name = sr_name;
this->chr_name = chr_name;

this->day = day;
this->month = month;
this->year = year;
}

TPerson::TPerson( int day, int month, int year ) {

this->day = day;
this->month = month;
this->year = year;
}

TPerson::TPerson( const char* sr_name, const char* chr_name ) {

this->sr_name = sr_name;
this->chr_name = chr_name;

}


void TPerson::setName( const char* sr_name, const char* chr_name ) {

this->sr_name = sr_name;
this->chr_name = chr_name;

}

void TPerson::setBirthday( int day, int month, int year ) {//personen behalten ihr geburtsdatum? ;)

this->day = day;
this->month = month;
this->year = year;

}


string TPerson::getName() {

string name = sr_name + " " + chr_name;
return name;

}

string TPerson::getBirthday() {

ostringstream osr;
osr << day << "." << month << "." << year;

string age( osr.str() );
return age;
}


int main( int argc, char* argv[] )
{



TPerson friskySUCKS( "frisky", "sucks", 12, 4, 2003 );
TPerson yourTeacher( "un", "named", 5, 3, 1901 );

cout<<"Dein Info Lehrer wurde geboren am : "<<yourTeacher.getBirthday()<<endl;
cout<<"Frisky heisst : "<<friskySUCKS.getName()<<endl;

friskySUCKS.setName( "bla", "bla" );
yourTeacher.setBirthday( 15, 1, 1900 );

cout<<"Dein Info Lehrer wurde geboren am: "<<yourTeacher.getBirthday()<<endl;
cout<<"Frisky heisst jetzt: "<<friskySUCKS.getName()<<endl;


}


und runterladen hier:

http://www.tuxipuxi.de/tperson.cpp


gruss,

tuxipuxi.

Nikkita
09-09-2003, 16:07
Jo thx läuft jetzt und blick da auch endlich durch.

@tuxipuxi das mit AnsiString ist glaub nur Borland spezifisch. In der Schule arbeiten wir eben mit Borland Builder :/ .

axeljaeger
09-09-2003, 16:38
Ich weis nicht, wie das bei dir ist, ich kann mir das mit meinem 15 Punkten in Informatik erlauben, wenn du den Lehrer nicht an die Wand reden kannst, würde ich das lassen: Erwähne doch mal, das man mit Borland auch standardkonform programmieren kann. Es gibt ja im C++-Standard auch eine Stringklasse, in <string>. Außerdem sollte man nur die Header includieren, die man wirklich braucht. VCL ist ja die Klassenbibliothek von Borland, allerdings glaube ich, das ist die alte. Für einen einfachen String könnte man auch den std::string nehmen. Ich gehe mal davon aus, das ihr auch noch GUI machen wollt und deshalb gleich an die Verwendung des Borland-Strings gewöhnt werden soll. Aber es wäre schon besser, gleich die neue Klassenbibliothek CLX zu nehmen. Ich hoffe, es findet sich jmd. mit Borlanderfahrung, der meinen Kommentar noch mal gegen liest, nicht das ich was verwechselt habe und du dich dann in die Nesseln setzt.

tuxipuxi
09-09-2003, 16:41
ppfftttt.... wenn ihr schon euch an eine bibliothek eines bestimmten herstellers bindet, koennt ihr auch gleich Qt benutzen. die verteilen educational licenses and schulen/unis ...

axeljaeger
09-09-2003, 16:46
Wie gesagt, wenn der Lehrer weis, das man als Schüler mehr Ahnung hat, kann man solche Verbesserungsvorschläge gerne anbringen. Wenn man aber nur sagt: Was du machst, ist Unsinn, da mach ich gar nicht mit, weil mir das zu doof ist, kann man nichts erreichen.

tuxipuxi
09-09-2003, 16:49
hm.. es muss sowieso ein komischer lehrer sein, der einfach mal AnsiString benutzen laesst, und das scheinbar ohne erklaerung, dann kann er auch einfach QString benutzen lassen.

ich bin heute im info unterricht ziemlich pampig geworden, weil er die 8. stunde in folge excel gemacht hat. openoffice wollte er auch nicht... idiot.

axeljaeger
09-09-2003, 16:52
Tja, ich hab morgen zum ersten Mal EDV beim neuen Lehrer, dem muss ich erstmal klar machen, was ich für Notenvorstellungen habe, zählt ja alles für's Abitur, dann mach ich dem klar, was er für Software zu benutzen hat.

TrollSlayer
09-09-2003, 17:40
oh oh! ich möchte nicht in seiner haut stecken. ;)

peschmae
09-09-2003, 18:11
Original geschrieben von tuxipuxi
[quote]
ich bin heute im info unterricht ziemlich pampig geworden, weil er die 8. stunde in folge excel gemacht hat. openoffice wollte er auch nicht... idiot.

Habt ihr in Deutschland eigentlich alle obligatorischen Info-Unterricht?
Bei uns war das immer Freifach.
Die Probleme sind allerdings überall dieselben: Entweder man macht was blödes (Excel, etc) oder man Programmiert (bei uns Java).
Wenn man programmiert dann hat man das Problem dass die Hälfte nicht mitkommt. Ein Viertel kommt mit und der restliche Viertel langweilt sich zu Tode. :rolleyes:

MfG Peschmä

tuxipuxi
09-09-2003, 18:18
ja,

ist freiwillig. ich habe es genommen um die moeglichkeit zu haben chemie in der 12. abzuwaehlen und einen fuer mich optimalen leistungskurs zu bekommen. vielleicht wirds ja in der 13. anspruchsvoll... wer weiss.

dieses jahr machen wir noch html und delphi... grossartig. fuer mich erscheint dass ziemlich planlos. man unterstellt den leuten erstmal, dass sie noch nie an einem (windows) rechner sassen( "und wenn ihr auf der blauen oberflaeche mit den icons seid, klickt auf start programme microsoft excel" und sowas ) und andererseits massen sie sich an, leuten, die ja offensichtlich keine ahnung von pc's im allgemeinem haben sollen, programmieren beizubringen. ... das passt nicht zusammen.

dann kommt dazu wieder diese unglaubliche ignoranz, den schuelern kein linux, oder jedenfalls freie software zu zeigen. wo ist das problem kmlinux auf ein paar rechnern zu installieren?

unser problem sind lehrer, die keine ahnung haben. ich habe nun erfahren, dass von 3 sportlehrern und 3 info lehrern jeweils nur EINER ein abgeschlossenes studium in dem fach haben. und dass ist doch etwas eigenartig.. man merkt, dass die informatik mit edv verwechseln.

gruss,

tuxipuxi.

axeljaeger
10-09-2003, 15:17
Bericht:

So nach 10 Minuten kam der Lehrer zu mir: "Du bist doch der Axel, mir ist klar, das ich dir dieses Jahr nichts beibringen kann. Aber vielleicht können wir alle von deinem Wissen profitieren"

tuxipuxi
10-09-2003, 15:34
haha :D,

das ist ja mal eine angenehme situation fuer dich, nur rumsitzen und anderen helfen und 15 punkte einsacken ;).