Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 09.05.2019
Сообщений: 5

Виртуальный метод в классах

04.12.2019, 20:02. Показов 1683. Ответов 4

Студворк — интернет-сервис помощи студентам
У меня стоит задача:
Write four classes to implement the printing of different kinds of trees (they should consist of very simple ASCII characters, i.e. '*', '/' and '\').
One of the classes is a base for the other three. In the base class, you should create a draw method – it's the only method of this class and it's a virtual method.
Next, in the derived classes, implement this method with three different versions of drawing.
In the main function, create a table of three pointers to objects of the base class.
Then create three objects of different kinds of trees and assign pointers to them to cells of the previously created table.
After this, in the for loop, iterate over the table and call the draw method from every element of the table.

Что должно получиться:
Drawing 1:
/\
//\\
Drawing 2:
/\
/**\
Drawing 3:
/\
/++\

Реализацию я начал следующим образом:
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
#include <iostream>
using namespace std;
 
class MAIN
{
protected:
    string a, b, c;
public:
    virtual void paint(void)
    {
 
    }
 
 
};
 
class main1
{
 
};
 
class main2
{
 
};
 
class main3
{
 
};
 
 
int main(void)
{
 
    system("pause");
    return 0;
}
Но я не понимаю как и что делать дальше. Только начал изучать полиморфизм и мало практики. Помогите решить мне задачу, чтобы у меня был пример для следующих заданий, спасибо!

Добавлено через 1 час 37 минут
На данный момент я уже кое как разобрался.. возникли лишь сложности с указателями на объекты подклассов и так же конструкторами.

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
#include <iostream>
using namespace std;
 
class MAIN
{
public:
    MAIN(int a) {};
 
    virtual void paint()
    {
        cout << " /\\ " << endl << "//\\\\" << endl;
    }
};
 
class Normal : public MAIN
{
 
    void paint() override
    {
        cout << " /\\ " << endl << "//\\\\" << endl;
    }
};
 
class Zvezda : public MAIN
{
    void paint() override
    {
        cout << " /\\ " << endl << "/**\\" << endl;
    }
};
 
class Plus : public MAIN
{
    void paint() override
    {
        cout << " /\\ " << endl << "/++\\" << endl;
    }
 
};
 
 
int main(void)
{
    MAIN* objects[3];
    
// Метод ниже нерабочий. Как бы его правильно сделать?
    Normal *normal =  &objects[0];
    Zvezda* zvezda = &objects[1];
    Plus *plus = &objects[2];
 
//Дальше я должен через цикл вывести 3 рисунка
 
 
 
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.12.2019, 20:02
Ответы с готовыми решениями:

Обязательно ли переопределять виртуальный метод в дочернем классе?
Вопрос: если в родительском классе определен и реализован виртуальный метод, обязательно переопределять его в дочернем? class OneTwo { ...

Виртуальный метод
Здравствуйте! Помогите, пожалуйста, найти ошибку в коде. #include &quot;stdafx.h&quot; class Person{ protected: char *name; ...

Виртуальный метод
class A { virtual void Print()=0; } class B : public A { virtual void Print() { //Печатаем в...

4
фрилансер
 Аватар для Алексей1153
6463 / 5671 / 1131
Регистрация: 11.10.2019
Сообщений: 15,109
04.12.2019, 20:14
Лучший ответ Сообщение было отмечено Andrew_Landers как решение

Решение

примерно так
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
#include <iostream>
using namespace std;
 
class MAIN
{
public:
    virtual void paint()
    {
        cout << " /\\ " << endl << "//\\\\" << endl;
    }
};
 
class Normal : public MAIN
{
    void paint() override
    {
        cout << " /\\ " << endl << "//\\\\" << endl;
    }
};
 
class Zvezda : public MAIN
{
    void paint() override
    {
        cout << " /\\ " << endl << "/**\\" << endl;
    }
};
 
class Plus : public MAIN
{
    void paint() override
    {
        cout << " /\\ " << endl << "/++\\" << endl;
    }
 
};
 
 
int main(void)
{
    Normal normal;
    Zvezda zvezda;
    Plus plus;
 
    MAIN* objects[]={&normal,&zvezda,&plus};
 
    const size_t count=sizeof(objects)/sizeof(*objects);
    for(size_t n=0;n<count;n++)
    {
        objects[n]->paint();
    }
 
    system("pause");
    return 0;
}
1
0 / 0 / 0
Регистрация: 09.05.2019
Сообщений: 5
04.12.2019, 20:51  [ТС]
Круто, все получилось!
Объясни лишь мне пожалуйста 47 строку словами!
0
фрилансер
 Аватар для Алексей1153
6463 / 5671 / 1131
Регистрация: 11.10.2019
Сообщений: 15,109
04.12.2019, 20:53
Andrew_Landers, получаю количество элементов в статическом массиве
sizeof(objects) - размер массива в байтах
sizeof(*objects) - размер одного элемента в байтах
1
0 / 0 / 0
Регистрация: 09.05.2019
Сообщений: 5
05.12.2019, 09:55  [ТС]
Спасибо большое)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.12.2019, 09:55
Помогаю со студенческими работами здесь

Виртуальный метод, шаблоны
Необходимо применить виртуальные методы? шаблон templete для какого нибудь метода(новичек) вообще не понимаю к чему можно применить. Есть...

Итератор и виртуальный метод
Есть задачка с гугла: #include &lt;iostream&gt; #include &lt;vector&gt; class A { public: A(int n = 0) : m_n(n) { }

Указатель на виртуальный метод
По мотивам какого-то вопроса тут возник вопрос, ответ на который я что-то не придумал. Как взять указатель на метод базового класса, если...

Класс работник. Виртуальный метод
Здраствуйте! Надо ввести работников с почасовой ЗП и фиксированной ЗП. Написать виртуальный метод для подсчета ЗП( для почасовиков -...

private наследование и виртуальный метод
Привет! Тут хотел бы спросить такой вопрос. Есть базовый класс с виртуальным методом в protected секции. Я наследую этот класс как...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru