• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

klasy dziedziczenie wskazniki

Object Storage Arubacloud
0 głosów
185 wizyt
pytanie zadane 25 kwietnia 2020 w C i C++ przez demon1234 Nowicjusz (160 p.)
mam problem z napisaniem klasy 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;
}
komentarz 25 kwietnia 2020 przez tangarr Mędrzec (154,780 p.)

Zacznij od napisania klasy Notebook o postaci:

class Notebook {
private:
  // tutaj daj zmienne
public:
    // zapamiętaj nazwę podaną w konstruktorze
    Notebook(const std::string &name);

    // usuń wszystkie dzieci w destruktorze
    ~Notebook();

    // dodaj dziecko
    void add(Notebook *child);

    // wypisz zawartość
    void print();
}

Kiedy to zaimplementujesz podziel się kodem

komentarz 25 kwietnia 2020 przez demon1234 Nowicjusz (160 p.)
#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 ) {

        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) {};

};


    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;
}


na ten moment mam tyle.

komentarz 25 kwietnia 2020 przez tangarr Mędrzec (154,780 p.)

1. metoda print: wyświetl nazwę obiektu a potem wywłoaj print dla wszystkich dzieci.

2. metoda add: tutaj przydałoby się zabezpieczenie przed tworzeniem cykli. W tej chwili linia

zeszyt2->add(zeszyt2);

powoduje straszne zamieszanie.

3. destruktor: wywołaj destruktor dla wszystkich dzieci

1 odpowiedź

+1 głos
odpowiedź 25 kwietnia 2020 przez poczatki Początkujący (360 p.)
edycja 25 kwietnia 2020 przez poczatki

Notebook *zeszyt = new Notebook("zeszyt");

Przede wszystkim trzeba zacząć od biblioteki (plik z końcówką .h)

#ifndef NOTEBOOK_H
#define NOTEBOOK_H

#include<iostream>

using namespace std;
class Notebook
{
string nazwa; 
public:
Notebook (string nazwa) //konstruktor
~Notebook() //destruktor
void add(Notebook *not);
void print();
};

#endif

To ci podpowiem na początek. Od tego musisz zrobić klasy, które dziedziczą z Notebook. Bo tak sugeruje ten fragment

Z klasy Notebook wyprowadź klasy PagesLine oraz PagesFloe

Tutaj masz przykłady LINK

I masz dwa wyjścia albo zrobić kolejny plik w projekcie z końcówką .cpp, gdzie rozpiszesz wszystkie funkcje i co mają robić albo możesz to zrobić w bibliotece.  Czyli po kolei 

• Konstruktor przyjmujący nazwę zeszytu.

Jeśli robisz to w drugim pliku ( .cpp), to musisz załączyć koniecznie bibliotekę!

#include"notebook.h" //*gdzie notebook to nazwa jaką nadasz plikowi .h"

Notebook::Notebook(string nazwa)
{
    this-> nazwa = nazwa;  //konstruktor przyjmujący nazwę zeszytu
}

itd. To nie są trudne rzeczy. Spróbuj dalej sam.

I koniecznie załącz też bibliotekę do maina! ( #include "notebook.h" *gdzie bib to nazwa jaką nadasz plikowi .h")

Podobne pytania

0 głosów
0 odpowiedzi 130 wizyt
pytanie zadane 18 kwietnia 2020 w C# przez Kamilmis Nowicjusz (120 p.)
0 głosów
1 odpowiedź 177 wizyt

92,539 zapytań

141,382 odpowiedzi

319,476 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...