Napisz klase Widget reprezentujaca widget o zadanej nazwie. Zaimplementuj:
- Konstruktor przyjmujacy nazwe widgetu.
- Destruktor usuwajacy z pamieci wszystkie dzieci widgetu.
- Jedna metode add, która przyjmuje wskaznik na dowolny widget i dodaje go do widgetu,
na rzecz którego jest wołana. - Jedna metode print, która drukuje na standardowe wyjscie nazwe widgetu oraz wszystkich jego
pochodne jak w przykładzie ponizej. Pochodne drukowane sa w kolejnosci ich dodawania metoda add.
Z klasy Widget wyprowadz klasy Button oraz Edit reprezentujace odpowiednio przycisk oraz pole tekstowe.
W kazdej z nich zaimplementuj jedynie konstruktor przyjmujacy nazwe widgetu. Wszystkie klasy
powinny byc przystosowane do uzycia w przykładowym programie ponizej. Klasy korzystaja tylko z
plików nagłówkowych iostream, string, oraz vector lub list.
Mam problem z metodą add i print, próbuję drukować za pomocą iostream, aleeee czy to aby na pewno jest włąściwy kierunek. Dziękuje za pomoc.
#include <iostream>
#include <string>
#include <vector>
#include <list>
using namespace std;
class Widget
{
friend ostream &operator <<(ostream &stream, const Widget &widget);
public:
static Widget *scan(istream &stream);
Widget(const string &name);
const string &getName() const;
virtual void add(string c)
{
c=name;
}
virtual ~Widget() //virtual destructor
private:
virtual ostream &print(ostream &stream) const;
string name;
};
class Button: public Widget
{
public:
Button(const string &name);
private:
virtual ostream &print(ostream &stream) const;
};
class Edit: public Widget
{
public:
Edit(const string &name);
private:
virtual ostream &print(ostream &stream) const;
};
Widget::Widget(const string &name): name(name) {}
const string &Widget::getName() const
{
return name;
}
Button::Button(const string &name):
Widget(name){}
Edit::Edit(const string &name):
Widget(name){}
friend ostream &operator <<(ostream &stream, const Widget &widget)
{
return widget.print(out);
}
virtual ostream &print(ostream &out) const
{
return out;
}
string Widget::print()
{
return c;
}
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;
}
program powinien wyswietlic:
window
window panel
window panel yes
window panel no
window edit