Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 11.01.2019
Сообщений: 56

Написать метод print() для класса виджетов

24.01.2020, 00:10. Показов 3882. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток,
Имеется класс, представляющий собой дерево виджетов (то есть подвиджеты в виджетах).
С помощью метода add() мы добавляем виджету его "детей", что в последствии дает нам дерево от родителя до всех его детей (по сути как обычное бинарное дерево). Задачей, является выписать на экран все виджеты от родителя до его детей с помощью метода print() таким образом:
C++
1
2
3
4
5
window
window panel
window panel yes
window panel no
window edit
Мною написанный метод print() выписывает так:
C++
1
2
3
4
5
window
window panel
panel yes
panel no
window edit
Помогите пожалуйста исправить этот метод, вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <vector>
#include <string>
 
using namespace std;
 
class Widget{
    string widget;
    vector<Widget *> deti;
public:
    Widget(const string &widget): widget(widget){}
    ~Widget(){
        for(const Widget *rebenok: deti){
            delete rebenok;}}
    void add(Widget *rebenok){
        deti.push_back(rebenok);}
    void print(){
        cout << widget << endl;
        for(auto rebenok: deti){
            cout << widget << " ";
            rebenok->print();}}};
 
class Button: public Widget{
public:
    Button(const string &nazwa_but): Widget(nazwa_but){}};
 
class Edit: public Widget{
public:
    Edit(const string &nazwa_ed): Widget(nazwa_ed){}};
 
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; }
Главное - функция main() должна оставаться неизменной!!!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.01.2020, 00:10
Ответы с готовыми решениями:

Написать метод print Full Name класса Student
Написать метод print Full Name класса Student, который выводит полное ФИО студента.

Печать для апплета. Метод print(Graphics g)
В случае если размер распечатываемого материала не слишком большой (не превосходит размер апплета) можно воспользоваться распечаткой в...

Создать для класса виртуальный метод, возвращающий уникальный идентификатор класса
В курсаче по ООП сказано создать для класса виртуальный метод,возвращающий уникальный идентификатор класса. Вопрос в том, что это такое?

2
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
24.01.2020, 00:34
Лучший ответ Сообщение было отмечено Алексей_КЛНН как решение

Решение

Алексей_КЛНН,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
#include <vector>
#include <string>
 
using namespace std;
 
class Widget {
    string widget;
    vector<Widget *> deti;
    Widget* parent = nullptr;
    void print_parent()
    {
        if (parent) parent->print_parent();
        cout << widget << ' ';
    }
public:
    Widget(const string &widget) : widget(widget) {}
    ~Widget() {
        for (const Widget *rebenok : deti) {
            delete rebenok;
        }
    }
    void add(Widget *rebenok) {
        rebenok->parent = this;
        deti.push_back(rebenok);
    }
    void print() {
        print_parent();
        cout << endl;
        for (auto rebenok : deti) {
            rebenok->print();
        }
    }
};
 
class Button : public Widget {
public:
    Button(const string &nazwa_but) : Widget(nazwa_but) {}
};
 
class Edit : public Widget {
public:
    Edit(const string &nazwa_ed) : Widget(nazwa_ed) {}
};
 
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;
}
0
0 / 0 / 0
Регистрация: 11.01.2019
Сообщений: 56
24.01.2020, 00:43  [ТС]
zayats80888, спасибо большое!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.01.2020, 00:43
Помогаю со студенческими работами здесь

Написать статический метод класса
Добрый день, подскажите, как можно реализовать данную программу? Требуется написать статический метод класса, вычисляющий функцию,...

Как изменить код VBA для сортировки, минуя метод "Debug.Print"?
Здравствуйте! Прошу помощи. Есть интересная тема https://www.cyberforum.ru/visual-basic/thread110829.html Исправил в коде (автор:...

Как написать метод класса по заданным параметрам
Помогите пожалуйста написать функцию для нахождения обьема #include &lt;iostream&gt; using namespace std; class Room { private: ...

Написать метод, инициализирующий массив экземпляров класса
метод инициализирует массив экземпляров класса , #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; class...

Как вызвать определенный метод переданного класса через метод другого класса?
Добрый день. Захотел я вызвать в методе класса метод некоего другого класса, о котором я пока не знаю. Мне пришла в голову...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru