Klassen und Instanzen - Thx an alle CommZ!

Hi,ich dachte ich mach lieber nen neuen Thread auf weil der andere wo dieser Text schonmal stand nichtsmehr mit der Überschrift zu tun hatte.
@ sollte das falsch gewesen sein plz korrigieren!

Okay...
habe versucht irgendwo ne "Anleitung" herzubekommen wie man Klassen und Instanzen definiert aber ich habe nichts brauchbares gefunden zumindest nichts verstanden ... großes Grinsen

Ich möchte jetzt gerne das add-book erweitern und zwar so,dass man beliebig viele Leute eintragen kann und dann 1.per switch(nehme ich an) die einzelnen Einträge auslesen kann,.

so vonwegen:"Welchen Eintrag möchten sie ausgegeben bekommen 1,2 oder 3.


und 2.das man alle aufeinmal ausgeben kann.

Kann mir jemand zeigen wie man das macht??
Bitte,bitte,bitte!!

Wäre vom allerfeinsten wenn man //Kommentare an den Code schreibt wo was getan wird ,damit ich das verstehe.

Ich weiss garnicht wie ich euch bis jetzt allen danken soll soviel Hilfe wie ich schon bekommen habe,find es echt super das es leute gibt die gerne helfen!
Danke an dieser Stelle an jeden der mitgemacht hat,echt Klasse!!

ThX & MfG,

Teekayo2

Hier nochmal der aktuelle code für euch:
//Add-book v.1.0.2 2005 ? by Te3k4Y-oO'H?


#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
string name;
string addy;
string tel;
string geb;
string gesammt;


cout<<"Guten Tag," <<endl;
cout<<"das ist ihr persoenliches kleines Adressbuch."<<endl<<endl<<endl;

cout<<"Geben sie bitte den Namen ein: "<<endl;
getline( cin , name );
cout<<endl;
cout<<"Geben sie bitte die Adresse ein: "<<endl;
getline (cin ,addy);
cout<<endl;
cout<<"Geben sie bitte die Telefonnummer an: "<<endl;
getline( cin , tel );
cout<<endl;
cout<<"Tragen sie hier bitte noch den Geburtstag an: "<<endl;
getline( cin , geb );

cout<<endl<<endl<<endl;

gesammt ="Name: "+name+"\nAddresse: "+addy+"\nTelefonnummer: "+tel+"\nGeburtstag: "+geb;

cout<<gesammt<<endl;

cout<<endl<<endl<<endl;

system("PAUSE");
return EXIT_SUCCESS;
}
 
hab grad nix zu tun
Code:
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
class Eintrag  //Klasse definieren
{
 
 
  public:
  
  Eintrag();
 
  Eintrag(string name_,string addy_,string tel_,string geb_);  // konstruktor
  void Ausgeben();
  private:
	  string name,addy,tel,geb;
 
};
Eintrag::Eintrag()
{ 
	name="";
	addy="";
	tel="";
	geb="";
}
Eintrag::Eintrag(string name_,string addy_,string tel_,string geb_)
{
 name=name_; 
 addy=addy_;
 tel=tel_;
 geb=geb_;
}
void Eintrag::Ausgeben()
{
 cout << "Name:" << name << endl;
 cout << "Addresse:"<< addy << endl;
 cout << "Tel.Nummer:"<<tel<<endl;
 cout << "Geburtstag:"<<geb<<endl;
}
int main(int argc, char *argv[])
{
string name;
string addy;
string tel;
string geb;
string gesammt;
Eintrag Eintraege[3];
cout<<"Guten Tag, das ist ihr persoenliches kleines Adressbuch."<<endl<<endl<<endl;


for(int i=0;i<3;++i)  //3 mal nen eintrag einlesen
{
cout<<"Name: "<<endl;

getline( cin , name);
cout<<"Adresse: "<<endl;
getline (cin ,addy);
cout<<"Telefonnummer: "<<endl;
getline( cin , tel );
cout<<"Geburtstag: "<<endl;
getline( cin , geb );

cout<<endl<<endl<<endl;

Eintraege[i] = Eintrag(name,addy,tel,geb);

}
string nummer;
cout << "Welchen Eintrag möchten sie sehen ( Nummer 1-3, 4=alle)"<<endl;

getline(cin,nummer);

if(nummer=='1')
{
	Eintraege[0].Ausgeben();
}
else if(nummer=="2")
{
	Eintraege[1].Ausgeben();
}
else if(nummer=="3")
{
	Eintraege[2].Ausgeben();
}
else if(nummer=="4")
{	
	for(int i=0;i<3;++i)
	{
		Eintraege[i].Ausgeben();
	}
}
else
{
	cout << "Ungültig"<<endl;
}

system("PAUSE");
return EXIT_SUCCESS;
}
Nicht getestet müsste aber funzen.

edit: ich seh grad da sind viele fehler drin, ich besser die mal aus
edit2: meine c++ kenntnisse auf der konsole sind nen bisschen eingerostet, mit der eingabe läuft das noch net so richtig, die klasse funzt soweit aber, ich setz mal die neue version rein, morgen such ich noch die anderen fehler
 
Hi,

Thx Lesc0!

Aber kannst du neben der Fehlerkorrektur vll. auch in den Code noch n "paar" Kommentare einfügen.
paar = viele;
viele = sehr viele; ^^??

Danke für deine hilfe hier,

MfG,

Teekayo2
 
Das Programm läuft bei mir einwandfrei, Lesco.
Einfach nur bei
Code:
  if(nummer=='1') die  ' ' mit " "
ersetzen ;)

TeeKayo2, was möchtest du denn genau "kommentiert" haben?
Das Programm ist soweit eigentlich selbsterklärend....
 
Original von TeeKayo2Okay...
habe versucht irgendwo ne "Anleitung" herzubekommen wie man Klassen und Instanzen definiert aber ich habe nichts brauchbares gefunden zumindest nichts verstanden ... großes Grinsen
Ich glaube er will eine Anleitung zur OOP.
@TeekKayo2
Kauf dir am besten ein Buch zu C++. Willst kein Buch kaufen, dann schau mal hier vorbei: http://www.onlinetutorials.de/cpp-index.htm. Da hat es ein paar gute Tutorials und einige Buchtipps hat es dort übrigens auch.
 
www.cpp-tutor.de ist auf deutsch und gut erklärt, sowohl die standart sachen, als auch oop

edit: bezüglich obs funzt oder nicht:
Nach dem ersetzen der ' durch ":
unter dev-cpp kompiliert gibts keine probs, unter m$ vc muss man bei name das erste mal(nur das erste mal) zwei zeilen eingeben und dadurch ist die eingabe irgendwie "verschoben", d.h. der String für geburtstag beim dritten eintrag wird als eingabe der nummer gewertet.
 
Also ich habe mal dort wo ich Fragen habe einfach Kommentare eingefügt.
Wäre nice wenn jemand diese mit den Antworten austauschen könnte!!

Ein Tipp noch im Compiler wirds farbig angezeigt wie ihr wisst müsst ihr euch ned so quälen eim lesen ,das ja grauenhaft hier ^^

//Add-book v.1.0.0 2005 ? by Te3k4Y-oO'H?


#include <cstdlib>
#include <iostream>

using namespace std;

class Eintrag //Klasse definieren und erstellen
{

public: //bedeutet was?

Eintrag();
Eintrag (string name_,string addy_,string tel_,string geb_); //Konstruktor bzw hier wird die variable Eintrag definiert?!
void Ausgeben(); //Wieso hier "void" oben aber nicht void Eintrag?
private: //Bedeutet was?

string name,addy,tel,geb;

};



Eintrag::Eintrag() // "::" Verbindungszeichen in C++ oder was?

{
name=" "; //Hier werden dieeinzelnen Variablen gefüllt ?!
addy=" ";
tel=" ";
geb=" ";
}

//Eintrag wird gleich gesagt woher er sich die Werte holen soll?!
Eintrag::Eintrag(string name_,string addy_,string tel_,string geb_) //Warum hier das "_" ??
{
name=name_;
addy=addy_;
tel=tel_;
geb=geb_;
}
void Eintrag::Ausgeben() //hier aufenmal doch VOID Eintrag? Und wieder :: was bedeutet das??
{
cout<<"Name:" <<name<<endl;
cout<<"Adresse:"<<addy<<endl;
cout<<"Tel.Nummer:"<<tel<<endl;
cout<<"Geburtstag:"<<geb<<endl;
}



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

string name;
string addy;
string tel;
string geb;
string gesammt;
Eintrag Eintraege [3];


cout<<"Guten Tag," <<endl;
cout<<"das ist ihr persoenliches kleines Adressbuch."<<endl<<endl<<endl;

for(int i=0;i<3;++i) //3 Einträge einlesen
{
cout<<"Geben sie bitte den Namen ein: "<<endl;
getline( cin , name );
cout<<endl;
cout<<"Geben sie bitte die Adresse ein: "<<endl;
getline (cin ,addy);
cout<<endl;
cout<<"Geben sie bitte die Telefonnummer an: "<<endl;
getline( cin , tel );
cout<<endl;
cout<<"Tragen sie hier bitte noch den Geburtstag an: "<<endl;
getline( cin , geb );

cout<<endl<<endl<<endl;

Eintraege = Eintrag(name,addy,tel,geb); //Wieso wird "Eintrag" hier neue Anweisungen gegeben es stand doch oben schon??
}

string nummer;
cout<<"Welchen Eintrag möchten sie sehen? (Nummer 1-3 , 4 = alle)"<<endl;

getline (cin,nummer);

if(nummer=="1")
{
Eintraege[0].Ausgeben(); //Der Punkt ,"." ist ein Verbindungszeichen?!
}

else if(nummer=="2")

{
Eintraege[1].Ausgeben();
}
else if(nummer=="3")
{
Eintraege[3].Ausgeben();
}
else if(nummer=="4")
{
for(int i=0;i<3;i++) // Wieso for (int ...) doppelt ??
{
Eintraege.Ausgeben();
}
}
else
{
cout<<"Ungültig"<<endl;
}

system("PAUSE");
return EXIT_SUCCESS;
}
 
Code:
//Add-book v.1.0.0 2005 ? by Te3k4Y-oO'H?


#include <cstdlib>
#include <iostream>

using namespace std;

class Eintrag //Klasse definieren
{

public: //alles was im public bereich steht ist auch von außerhalb der klasse erreichbar

Eintrag(); // default Konstruktor, wird aufgerufen, sobald man eine variable des typs eintrag definiert 
Eintrag (string name_,string addy_,string tel_,string geb_); // anderer konstruktor,der die member der Klasse mit werten füllt
void Ausgeben(); //Ausgeben() -> Methode Eintrag() -> Konstruktor, das ist ein Unterschied, 
private: //alles was im private teil steht kann nur die Klasse und ihre member auslesen/verändern

string name,addy,tel,geb;

};



Eintrag::Eintrag() // "::" Hier wird der Konstruktor definiert, oben nur deklariert

{
name=" "; //Variablen werden einfach mal leere zeichenketten zugewiesen, in unserem fall eigentlich unwichtig
addy=" ";
tel=" ";
geb=" ";
}

//Eintrag wird gleich gesagt woher er sich die Werte holen soll?!
Eintrag::Eintrag(string name_,string addy_,string tel_,string geb_) //Damit es keine überschneidung mit den variablen der klasse gibt, man hätte sie auch anders nennen können
{
name=name_;
addy=addy_;
tel=tel_;
geb=geb_;
}
void Eintrag::Ausgeben() //hier wird die methode(kein Konstruktor) definiert
{
cout<<"Name:" <<name<<endl;
cout<<"Adresse:"<<addy<<endl;
cout<<"Tel.Nummer:"<<tel<<endl;
cout<<"Geburtstag:"<<geb<<endl;
}



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

string name;
string addy;
string tel;
string geb;
string gesammt;
Eintrag Eintraege [3];


cout<<"Guten Tag," <<endl;
cout<<"das ist ihr persoenliches kleines Adressbuch."<<endl<<endl<<endl;

for(int i=0;i<3;++i) //3 Einträge einlesen
{
cout<<"Geben sie bitte den Namen ein: "<<endl;
getline( cin , name );
cout<<endl;
cout<<"Geben sie bitte die Adresse ein: "<<endl;
getline (cin ,addy);
cout<<endl;
cout<<"Geben sie bitte die Telefonnummer an: "<<endl;
getline( cin , tel );
cout<<endl;
cout<<"Tragen sie hier bitte noch den Geburtstag an: "<<endl;
getline( cin , geb );

cout<<endl<<endl<<endl;

Eintraege[i] = Eintrag(name,addy,tel,geb); //Die Einträge müssen mit Daten gefüllt                         //werden
}

string nummer;
cout<<"Welchen Eintrag möchten sie sehen? (Nummer 1-3 , 4 = alle)"<<endl;

getline (cin,nummer);

if(nummer=="1")
{
Eintraege[0].Ausgeben(); //  Mit dem Punkt wird auf einen member der Klasse
                                          // zugegriffen ( in unserem Fall eine Methode)
}

else if(nummer=="2")

{
Eintraege[1].Ausgeben();
}
else if(nummer=="3")
{
Eintraege[3].Ausgeben();
}
else if(nummer=="4")
{
for(int i=0;i<3;i++) // Doppelt? 
{
Eintraege[i].Ausgeben();
}
}
else
{
cout<<"Ungültig"<<endl;
}

system("PAUSE");
return EXIT_SUCCESS;
}
Es wäre glaub ich besser, wenn du einfach nen buch oder tut zu oop liest
 
Meiner Meinung nach solltest du dich erstmal mit diversen Lektüren auseinandersetzen, da eine Erklärung der einzelnen Sachen weitere Fragen aufwerfen dürfte.

Wenn du dich mit OOP noch nicht befasst hast, wird es auch etwas schwer, sachen wie einen Konstruktor zu erklären.

Ebenso relativ elementare Sachen wie "for-schleifen"

Good Luck


// Lesco ist zu schnell für mich...
 
Hi,

Ersteinmal ThX für die Erklärung oben im Text!!!

@nook:

Also ich habe bisjetzt ein paar Tuts durchgearbeitet (kleine mit dem elementarsten Dingen) von daher weiss ich auch über Schleifen etc. bescheid.

Allerdings weiss ich sogut wie reingarnichts über oop.
Und ich dachte auch ned das wenn ich ne Class erstelle mich bereits in dem Bereich bewege...

MfG,

Teekayo2
 
Zurück
Oben