Klassen in c++
-
Hie Leute,
hab folgenden Quelltext in C++ geschrieben und will den jetzt in Klassen packen, was laut buchübung möglich ist.... weiss nur nicht wie...wenn das programm ausgeführt wird, sollen zahlen eingegeben werden und angezeigt werden.. klappt
dann sollen die zahlen bei eingabe einere negativen zahl in umgekehrter weise wieder ausgegeben werden (vom stapel). klappt auch 
nun soll der code in klassen geschrieben werden... klappt nicht
Bite Helft mir
#include <iostream> #define MAX 10 using namespace std; struct STAPEL { int element[MAX]; int hoehe; }; int empty (STAPEL *s); void init (STAPEL *s); void push (STAPEL *s, int x); int pop (STAPEL *s); void print (STAPEL *s); int main (int i, char * const argv[]) { STAPEL s1; init(&s1); int tmp; do { cout << "Bitte wert eingeben (negative zahl zum beenden): "; cin >> tmp; //schreibe zahlen in tmp if (tmp > -1) //wenn tmp > (-1), dann soll aufgestapelt werden { push (&s1, tmp); //packt die zahlen auf den stapel print(&s1); //ausgabe } } while(tmp>-1); while (!empty(&s1)) //wenn empty mit 0 zurückgegeben wird, wird etwas vom stapel runtergeholt { cout << pop(&s1)<<endl; } } int empty (STAPEL *s) { if(s->hoehe==0) return 1; //wenn 1, dann stapel leer else return 0; //wenn 0, dann stapel nicht leer } void init (STAPEL *s) { s->hoehe=0; } void push (STAPEL *s, int x) { if(MAX==s->hoehe) cout<<"Sorry Stapel voll!\n"; //fehler bei vollem stapel else { s->element[s->hoehe]=x; s->hoehe++; } } int pop(STAPEL *s) { s->hoehe--; return s->element[s->hoehe]; } void print(STAPEL *s) { for(int i=0;i<s->hoehe;i++) // der Fehler liegt hier Erklaerung s.u. cout<<s->element[i]<<endl; //soll element ausgeben }
-
Du hast eine struct mit 2 Datenelementen und eine Reihe von unabhängigen
Funktionen, von denen jede als Parameter einen Stapel* benötigt. Also was
liegt da wohl na...
-
Hm, ich versteh nicht ganz was du mit "in Klassen schreiben" meinst!?
Meinst du das der Code als eine Klasse mit den Datenmembern STAPEL etc. und Methoden empty, init etc. geschrieben werden soll (also von dir per Hand)?
Wenn ja, dann sag doch mal wo das Problem ist? Also was bekommst du nicht hin?
-
ja, wills per hand schreiben
mein problem ist einfach, das ich das mit den klassen nicht ganz verstehe (hab mehrere bücher durchwälzt.... internet durchforstet usw)....
ich hoffe das anhand meines eigenen quelltextes verstehen zu können...
-
So könntest du ja mal anfangen:
class STAPEL { public: // Konstruktor erledigt die Initialisierung STAPEL() { s->hoehe=0; memset(element, 0x00, sizeof element); } int empty (); void push (int x); int pop (); void print (); private: int element[MAX]; int hoehe; };
-
das is schon mal gut... probier ich gleich aus....
könnte mir jemand evtl. kurz erläutern, was klassen genaus sind und welche funktion sie haben.....
hab das bis jetz nur so weit verstande, das klassen mehrere dinge auf einmal beschreiben können (z.b. bei 3 autos:
auto1speed=130km/
auto2speed=100km/
auto3speed=150km/dass das dann alles in eine klasse gepackt werden kann. stimmt das so einigermassen?)
Redhead schrieb:
So könntest du ja mal anfangen:
....kannste deinen source code ein wenig erläutern??
z.b.:
memset(element, 0x00, sizeof element);is mir komplett neu
-
ok, hab mich nun soweit vorgekämpft... ber mehr geht echt net... blick da selbst kaum noch durch...
Bitte helft mir mit "denkanstössen":
#include <iostream> #define MAX 10 using namespace std; class STAPEL //klasse öffnen { struct STAPEL1 { int element[MAX]; int hoehe; }; public: int empty (); void init (); void push (int x); int pop (); void print (); }; int main (int i, char * const argv[]) { STAPEL s1; s1.init(); int tmp; do { cout << "Bitte wert eingeben (negative zahl zum beenden): "; cin >> tmp; //schreibe zahlen in tmp if (tmp > -1) //wenn tmp > (-1), dann soll aufgestapelt werden { s1.push(tmp); //packt die zahlen auf den stapel //s1.print; //ausgabe } } while(tmp>-1); //while (!empty()) //wenn empty mit 0 zurückgegeben wird, wird etwas vom stapel runtergeholt { cout << s1.pop()<<endl; } } int STAPEL::empty() { if(s->hoehe==0) return 1; //wenn 1, dann stapel leer else return 0; //wenn 0, dann stapel nicht leer } void STAPEL::init() { s->hoehe=0; } void STAPEL::push(int x) { if(MAX==s->hoehe) cout<<"Sorry Stapel voll!\n"; //fehler bei vollem stapel else { s->element[s->hoehe]=x; s->hoehe++; } } int STAPEL::pop() { s->hoehe--; return s->element[s->hoehe]; } void STAPEL::print() { for(int i=0;i<s->hoehe;i++) // der Fehler liegt hier Erklaerung s.u. cout<<s->element[i]<<endl; //soll element ausgeben }
-
1.) Die Klasse "STAPEL" ist bereits dein Stapel. Du benötigst keine zusätzliche innere Struktur. Kann man aber verwenden, zwecks eventuell schönerem Code.
2.) In den Memberfunktionen der Klasse STAPEL hast du Zugriff, auf die Variablen, die in der Klasse deklariert sind. In diesem Fall: "hoehe" und "element[]".Du kannst dir eine Klasse als eine Datenstruktur vorstellen, die zusätzlich noch Funktionen beinhaltet.
Aber bevor ich jetzt den Sinn und Unsinn von Klassen breitschlage, empfehle ich dir doch lieber ein Tutorial darüber durchzulesen. Und dann heisst es: Anwenden, versuchen zu verstehen, anwenden, verstehen.init
Die Methode "empty()" müsste zum Beispiel so aussehen:
int STAPEL::emtpy() { if(hoehe==0) return 1; else return 0; }