0 / 0 / 1
Регистрация: 30.01.2017
Сообщений: 72
1

Виртуальные базовые классы

19.03.2018, 14:11. Показов 1663. Ответов 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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <iostream>
#include <string.h>
#include <windows.h>
 
using namespace std;
 
class Medicine
{
public:
    Medicine(const char *, const char *, const char *, int);
    void show_medi(void);
    const char *vud;
    const char *group;
    const char *name;
    int srok_godnosti;
};
 
Medicine::Medicine(const char *vud, const char *group, const char *name, int srok)
{
    //strcpy(Medicine::vud, vud);
    Medicine::group = group;
    Medicine::name = name;
    Medicine::srok_godnosti = srok;
}
void Medicine::show_medi(void)
{
    SetConsoleOutputCP(1251);
    cout << "Вид лекарств: " << vud << endl;
    cout << "Группа: " << group << endl;
    cout << "Название: " << name << endl;
    cout << "Срок годности: " << srok_godnosti << endl;
}
 
class Sostav
{
public:
    Sostav(const char *, int);
    void show_sostav(void);
    const char *component;
    int kolichestvo;
};
 
Sostav::Sostav(const char *component, int kolichestvo)
{
    Sostav::component = component;
    Sostav::kolichestvo = kolichestvo;
}
 
void Sostav::show_sostav(void)
{
    SetConsoleOutputCP(1251);
    cout << "Компонент: " << component << endl;
    cout << "Количество компонента : " << kolichestvo << endl;
}
 
class liku : public Medicine, public Sostav
{
public:
    liku(const char *, const char *, const char *, int, const char *, int);
    void show_liku (void);
};
 
liku::liku(const char *vud, const char *group, const char *name, int srok_godnosti, const char *component, int kolichestvo) : Medicine(vud, group, name, srok_godnosti), Sostav(component, kolichestvo)
{
    //strcpy(Medicine::vud, vud);
    Medicine::vud = vud;
    Medicine::group = group;
    Medicine::name = name;
    Medicine::srok_godnosti = srok_godnosti;
    Sostav::component = component;
    Sostav::kolichestvo = kolichestvo;
}
 
void liku::show_liku(void)
{
    SetConsoleOutputCP(1251);
    cout << "Вид: " << vud << endl;
    cout << "Группа :" <<group <<endl;
    cout << "Название :" << name <<endl;
    cout << "Срок годности :" <<srok_godnosti<<endl;
    cout << "Компонент :" <<component <<endl;
    cout << "Количество :"<< kolichestvo<<endl;
 
}
 
int main(void)
{
    SetConsoleOutputCP(1251);
    liku my_lik("Таблетки", "2222", "Фарингосепт", 12, "Фурасол", 480);
    my_lik.show_liku();
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.03.2018, 14:11
Ответы с готовыми решениями:

Виртуальные базовые классы
Необходимо написать примеры с комментариями использования виртуальных базовых классов

Виртуальные базовые классы и деструкторы
Пожалуйста, помогите разобраться. Решаю задачу 6 глава 17 из Праты. Кратко: в определении...

Виртуальные абстрактные базовые классы
Привет всем!:-) Вчера столкнулся со следующей проблемой: компилятор ругается на чистый виртуальный...

Виртуальные базовые классы/закрытое наследование
Хотел уточнить правильно ли я понял материал. Если я породил два класса через виртуальное, открытое...

3
Форумчанин
Эксперт CЭксперт С++
8191 / 5041 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
19.03.2018, 15:00 2
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <iostream>
#include <string.h>
#include <windows.h>
 
using namespace std;
 
struct BaseOfAll
{
    virtual ~BaseOfAll() = default;
};
 
class Medicine : virtual public BaseOfAll
{
public:
    Medicine(const char *, const char *, const char *, int);
    void show_medi(void);
    const char *vud;
    const char *group;
    const char *name;
    int srok_godnosti;
};
 
Medicine::Medicine(const char *vud, const char *group, const char *name, int srok)
{
    //strcpy(Medicine::vud, vud);
    Medicine::group = group;
    Medicine::name = name;
    Medicine::srok_godnosti = srok;
}
void Medicine::show_medi(void)
{
    SetConsoleOutputCP(1251);
    cout << "Вид лекарств: " << vud << endl;
    cout << "Группа: " << group << endl;
    cout << "Название: " << name << endl;
    cout << "Срок годности: " << srok_godnosti << endl;
}
 
class Sostav : virtual public BaseOfAll
{
public:
    Sostav(const char *, int);
    void show_sostav(void);
    const char *component;
    int kolichestvo;
};
 
Sostav::Sostav(const char *component, int kolichestvo)
{
    Sostav::component = component;
    Sostav::kolichestvo = kolichestvo;
}
 
void Sostav::show_sostav(void)
{
    SetConsoleOutputCP(1251);
    cout << "Компонент: " << component << endl;
    cout << "Количество компонента : " << kolichestvo << endl;
}
 
class liku : public Medicine, public Sostav
{
public:
    liku(const char *, const char *, const char *, int, const char *, int);
    void show_liku (void);
};
 
liku::liku(const char *vud, const char *group, const char *name, int srok_godnosti, const char *component, int kolichestvo) : Medicine(vud, group, name, srok_godnosti), Sostav(component, kolichestvo)
{
    //strcpy(Medicine::vud, vud);
    Medicine::vud = vud;
    Medicine::group = group;
    Medicine::name = name;
    Medicine::srok_godnosti = srok_godnosti;
    Sostav::component = component;
    Sostav::kolichestvo = kolichestvo;
}
 
void liku::show_liku(void)
{
    SetConsoleOutputCP(1251);
    cout << "Вид: " << vud << endl;
    cout << "Группа :" <<group <<endl;
    cout << "Название :" << name <<endl;
    cout << "Срок годности :" <<srok_godnosti<<endl;
    cout << "Компонент :" <<component <<endl;
    cout << "Количество :"<< kolichestvo<<endl;
 
}
 
int main(void)
{
    SetConsoleOutputCP(1251);
    liku my_lik("Таблетки", "2222", "Фарингосепт", 12, "Фурасол", 480);
    my_lik.show_liku();
}
0
0 / 0 / 1
Регистрация: 30.01.2017
Сообщений: 72
19.03.2018, 15:08  [ТС] 3
Что вообще должен он делать?
И будет ли разница при выводе на экран с виртуальным классом и без него.
0
Форумчанин
Эксперт CЭксперт С++
8191 / 5041 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
19.03.2018, 15:45 4
Rock666, в данном случае разницы вообще нет.
Виртуальный базовый класс (виртуальное наследование) нужен чтобы решить неоднозначность, которая может возникнуть при множественном наследовании. У вас никаких неоднозначностей быть не может т.к. область действия (применение) классов не пересекается.
Так что я добавил базовый класс и виртуальное наследование ради "базового класса и виртуального наследования".
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.03.2018, 15:45
Помогаю со студенческими работами здесь

Виртуальные базовые классы: какие требования предъявляются к иерархии наследования?
класс на вершине иерархии определяет конструктор с параметрами. какие требования предъявляются к...

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

Базовые и порожденные классы
Здравствуйте, помогите пожалуйста с вопросом: Что должно быть предусмотрено в базовом классе,...

Абстрактные базовые классы
Помогите решить пожалуйста!) Задание 1 . Создать базовый класс - фигура, и производные класс -...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru