Zeiger


Grüß Gott,
ich hänge gerade bei einem kleinen Problem fest und könnte eure Hilfe gebrauchen.
Folgende Aufgabe: Man soll eine Ablage erstellen. Diese hat einen Wert und eine Ablage next. Jede Ablage hat einen Zeiger Ablage *oben der auf das oberste zeigt. Die Methoden drauflegen, runternehmen, top und allesAusgeben sollen erstellt werden. So hab ich das jetzt erstmal gemacht:
Ablage Header:
Code:
#ifndef ABLAGE_H
#define ABLAGE_H

class ablage
{
public:
    ablage();
    void drauflegen(int x);
    void runternehmen();
    int top();
    void allesAusgeben();


private:
    int info;
    ablage *next;
    static int cnt;
     ablage *oben = nullptr;
};


#endif // ABLAGE_H
ablage cpp:
Code:
#include "ablage.h"
#include <iostream>
using namespace std;


ablage::ablage()
{


}

int ablage::cnt = 0;


void ablage::drauflegen(int x) {
 ablage *p = new ablage;


 p->info = x;
 p->next = oben;


 oben = p;


 cnt++;
}


void ablage::runternehmen() {
ablage *help;


if(cnt ==0) {
    cout << "Ablage ist leer!" << endl;
    help = nullptr;
}
else {
 help = oben->next;
 cnt--;
}
delete oben;
oben = help;
}


int ablage::top() {
    return oben->info;
}


void ablage::allesAusgeben() {
    ablage *p = oben;


    while(p != nullptr) {
        cout << p->info << endl;
        p = p->next;
    }
}
Und in der Main könnte es so aussehen:
Code:
ablage a;
a.drauflegen(2);
a.drauflegen(9);
a.drauflegen(3);
a.drauflegen(8);
a.drauflegen(5);


a.allesAusgeben();
Ich hätte da 2 Fragen:

1.) (Hier gibt es kein richtig oder falsch, ich hab nur keine Idee was man da machen könnte) Man soll einen geeigneten Konstruktor für die Ablage erstellen. Mir fält nicht ein was für Attribute man der Ablage geben könnte.

2.) Von der Ablage soll alles in eine andere Ablage kopiert werden und zwar so, dass es in der gleichen Reihenfolge ist. Man darf nur eine Zwischenablage und die bestehenden Methoden benutzen. Ich hab auch hier keinen Ansatz wie man das machen könnte.

Gruß Max
 

cwriter

Erfahrenes Mitglied
Folgende Aufgabe: Man soll eine Ablage erstellen.
Ok, also ein Stack.


Mir fält nicht ein was für Attribute man der Ablage geben könnte
Aber du hast doch schon Member definiert?
Dein Stack ist zwar eher eine Linked List, aber abgesehen von cnt, welches definitiv nicht static sein sollte und die Zuweisung von "oben" zu nullptr, welche im Konstruktor sein muss, sieht alles auf den ersten Blick ok aus.
Du verwendest generell sehr gerne static - tu das nicht. Globale Variablen machen immer Probleme - oft erst dann, wenn man das gesamte Programm umschreiben muss, um das Problem zu beheben.


Man darf nur eine Zwischenablage und die bestehenden Methoden benutzen. Ich hab auch hier keinen Ansatz wie man das machen könnte.
Vom einen Stack in die Zwischenablage umbeigen (kehrt die Reihenfolge um) und dann von der Zwischenablage in das Ziel kopieren (2. Umkehrung = wieder richtige Reihenfolge) ist dir nicht eingefallen?

Gruss
cwriter
 

Zvoni

Erfahrenes Mitglied
Bin jetzt nicht der C++-ler, aber wenn ich deinen Code richtig lese, verkettest du von "unten" nach "oben", was mMn bei nem Stack nicht wirklich Sinn ergibt.
Hätte eher von oben nach unten verkettet, da bei einem Stack du eigentlich immer auf das letzte/oberste Element zeigst.
Ich hatte mal nen rudimentären Stack in VBA geschrieben.
Es gab einmal den Stack selbst mit den benötigten Methoden (Push, Pop etc.), und das Stackelement selbst, was einen Zeiger auf das nächste "drunter"-liegende Element enthielt.
D.H. der Zeiger auf das nächste Element war Bestandteil des Elements selbst, und nicht des Stacks