Witam mam takie zadanie niestety nie mogę sobie z nim poradzić
Widgety to graficzne elementy interfejsu użytkownika, jak przyciski, suwaki, czy wyświetlacze. Są one
często implementowane jako klasy wywiedzione z jednej klasy bazowej reprezentującej pusty widget.
Skomplikowane widgety składają się z innych, na przykład edytor tekstu składa się z pola tekstowego
oraz pionowego i poziomego suwaka. Całe okienko aplikacji również jest widgetem zawierającym wiele
mniejszych kontrolek. Składowe dużego widgetu nazywamy jego dziećmi zaś sam ten widget nazywamy
ich rodzicem. Graficzny układ widgetów opisany jest więc przez wielopoziomowe drzewo zawierania się
jednych widgetów w innych. Korzeniem tego drzewa, czyli rodzicem wszystkich widgetów, jest okno aplikacji. Drzewo widgetów jest zaimplementowane jako dynamiczna struktura danych. Widgety są tworzone
dynamicznie, a każdy z nich przechowuje listę wskaźników na swoje dzieci. Destruktor rodzica usuwa z
pamięci wszystkie jego dzieci. Do usunięcia wszystkich widgetów aplikacji wystarczy więc usunięcie głównego okna. Każdy widget posiada unikatową nazwę umożliwiającą jego łatwe wyszukanie wśród wszystkich
kontrolek aplikacji. Napisz klasę Widget reprezentującą widget o zadanej nazwie. Zaimplementuj:
• Konstruktor przyjmujący nazwę widgetu.
• Destruktor usuwający z pamięci wszystkie dzieci widgetu.
• Jedną metodę add, która przyjmuje wskaźnik na dowolny widget i dodaje go jako dziecko widgetu,
na rzecz którego jest wołana.
• Jedną metodę print, która drukuje na standardowe wyjście nazwę widgetu oraz wszystkich jego
dzieci jak w przykładzie poniżej. Dzieci drukowane są w kolejności ich dodawania metodą add.
Z klasy Widget wyprowadź klasy Button oraz Edit reprezentujące odpowiednio przycisk oraz pole tekstowe. W każdej z nich zaimplementuj jedynie konstruktor przyjmujący nazwę widgetu. Wszystkie klasy
powinny być przystosowane do użycia w przykładowym programie poniżej. Klasy korzystają tylko z
plików nagłówkowych iostream, string, oraz vector lub list.
Przykładowy program
int main() {
Button yes = new Button("yes");
Button no = new Button("no");
Widget panel = new Widget("panel");
panel->add(yes);
panel->add(no);
Edit edit = new Edit("edit");
Widget *window = new Widget("window");
window->add(panel);
window->add(edit);
window->print();
delete window; }
Wykonanie
window
window panel
window panel yes
window panel no
window edit
na dany moment mam tyle
#include <iostream>
#include <string>
#include <list>
using namespace std;
class Widget{
public:
Widget(const string &name ):name(name){};
void add (Widget *wskaznik ) {
obiekt.push_back(wskaznik);
};
void print(){
for(Widget* n : obiekt)
std::cout << n->name << ' ';
}
// ~Widget();
private:
string name;
list<Widget*> obiekt;
};
class Button : public Widget{
public:
Button(const string &name) :Widget(name) {};
};
class Edit : public Widget{
public:
Edit(const string &name) :Widget(name) {};
};
int main()
{
Button *yes = new Button("yes");
Button *no = new Button("no");
Widget *panel = new Widget("panel");
panel->add(yes);
panel->add(no);
Edit *edit = new Edit("edit");
Widget *window = new Widget("window");
window->add(panel);
window->add(edit);
window->print();
delete window;
}