wskażnik na obiekt w metodzie

0

mam problem z napisaniem metody add ;(

treśc zadania,

Napisz klasę Notebook reprezentującą zeszyt o zadanej nazwie. Zaimplementuj:

• Konstruktor przyjmujący nazwę zeszytu.

• Jedną metodę add, która przyjmuje wskaźnik na dowolny zeszyt i dodaje go jako dziecko zeszytu, na rzecz którego jest wołana.

• Jedną metodę print, która drukuje na standardowe wyjście nazwę zeszytu oraz wszystkich jego dzieci jak w przykładzie poniżej. Dzieci drukowane są w kolejności ich dodawania metodą add.

• Destruktor usuwający z pamięci wszystkie dzieci zeszytu.

Z klasy Notebook wyprowadź klasy PagesLine oraz PagesFloe reprezentujące odpowiednie rodzaje kartek . W każdej z nich zaimplementuj jedynie konstruktor przyjmujący nazwę. Wszystkie klasy powinny być przystosowane do użycia w przykładowym programie poniżej. Klasy korzystają tylko z plików nagłówkowych iostream, string, list.


int main()
{
    PagesLine* lineYes = new PagesLine("lineYes");
    PagesLine* lienNo = new PagesLine("lineNo");
    Notebook* zeszyt = new Notebook("zeszyt");
    zeszyt->add(yes);
    zeszyt->add(no);
    PagesFloe* floeYes = new PagesFloe("floeyes");
    Notebook* zeszyt2 = new Notebook("zeszyt2");
    zeszyt2->add(zeszyt);
    zeszyt2->add(zeszyt2);
    zeszyt2->print();
    delete zeszyt;
}
1

I co już masz?

0
kq napisał(a):

I co już masz?

Aktualnie na daną chwile tyle.

#include <iostream>
#include <string>
#include <list>

using namespace std;

class Notebook{

public:
    list<Notebook*> obiekt;

    Notebook(const string &name ):name(name){};

    void add (Notebook *wskaznik ) {

    };
    void print(){

        }
  //  ~Notebook();

private:

    string name;


};

class PagesLine : public Notebook{

public:
    PagesLine(const string &name) :Notebook(name) {};


};

class PagesFloe : public Notebook{

public:
    PagesFloe(const string &name) :Notebook(name) {};

};


    int main()
{
    PagesLine *lineYes = new PagesLine("lineYes");
    PagesLine *lineNo = new PagesLine("lineNo");
    Notebook *zeszyt = new Notebook("zeszyt");
    zeszyt->add(lineYes);
    zeszyt->add(lineNo);
    PagesFloe *floeYes = new PagesFloe("floeYes");
    Notebook *zeszyt2 = new Notebook("zeszyt2");
    zeszyt2->add(zeszyt);
    zeszyt2->add(zeszyt2);
    zeszyt2->print();
    delete zeszyt;
}
1

Lista ma metodę push_back, możesz jej użyć.

0
kq napisał(a):

Lista ma metodę push_back, możesz jej użyć.

tak zrobiłem ale nie wyrzuca mi nazw.


class Notebook{

public:
    list<Notebook*> obiekt;

    Notebook(const string &name ):name(name){};

    void add (Notebook *wskaznik ) {

        obiekt.push_back(wskaznik);

    };
    void print(){

            for (auto it=obiekt.begin(); it!=obiekt.end(); ++it)
            std::cout << " " << *it;

        }
   //~Notebook();

private:

    string name;


};

class PagesLine : public Notebook{

public:
    PagesLine(const string &name) :Notebook(name) {};


};

class PagesFloe : public Notebook{

public:
    PagesFloe(const string &name) :Notebook(name) {};

};


1

Masz ranged for, używaj go.

void print()
{
    for(Notebook* n : obiekt)
        std::cout << n->nazwa << '\n';
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1