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

Множественное наследование

17.11.2020, 19:01. Показов 906. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется следующая иерархия классов:

Делаю следующее: К1-К3 это характеристика устройства как электронного, вычислительного и пользовательского устройства с соответствующими полями, К4 это его характеристика полноценного устройства со стоимостью, но без названия. К5 это характеристика полного устройства-смартфона с названием.
Проблема в том, что если user_device наследуется как private, я не могу получить доступ к нему из smartphone.

E0289 отсутствуют экземпляры конструктора "unknown_device::unknown_device", соответствующие списку аргументов :128
C4594 для класса "smartphone" никогда нельзя создать экземпляр — непрямой виртуальный базовый класс "user_device" является недоступным:116

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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#pragma once
#include <iostream>
#include <iomanip>
#include <string>
#include <string.h>
#include <Windows.h>
using namespace std;
 
class electronic_device{
public:
    string type_battery;
    double battery_capacity;
    double consume_power;
    electronic_device();
    electronic_device(string _type_battery, double _battery_capacity, double _consume_power);
    ~electronic_device();
    void set_type_battery(string _type_battery);
    void set_battery_capacity(double _battery_capacity);
    void set_consume_power(double _consume_power);
    string get_type_battery()const;
    double get_battery_capacity()const;
    double get_consume_power()const;
};
electronic_device::electronic_device() {};
electronic_device::electronic_device(string _type_battery, double _battery_capacity, double _consume_power) {
    type_battery = _type_battery;
    battery_capacity = _battery_capacity;
    consume_power = _consume_power;
}
electronic_device::~electronic_device() {};
void electronic_device::set_type_battery(string _type_battery) { type_battery = _type_battery; }
void electronic_device::set_battery_capacity(double _battery_capacity) { battery_capacity = _battery_capacity; }
void electronic_device::set_consume_power(double _consume_power) { consume_power = _consume_power; }
string electronic_device::get_type_battery()const { return type_battery; }
double electronic_device::get_battery_capacity()const { return battery_capacity; }
double electronic_device::get_consume_power()const { return consume_power; }
 
 
class computing_device {
public:
    string cpu;
    int core_count;
    double cpu_frequency;
    computing_device();
    computing_device(string _cpu, int _core_count, double _cpu_frequency);
    ~computing_device();
    void set_cpu(string _cpu);
    void set_core_count(int _core_count);
    void set_cpu_frequency(double _cpu_frequency);
    string get_cpu()const;
    int get_core_count()const;
    double get_cpu_frequency()const;
};
computing_device::computing_device(){};
computing_device::computing_device(string _cpu, int _core_count, double _cpu_frequency) {
    cpu = _cpu;
    core_count = _core_count;
    cpu_frequency = _cpu_frequency;
}
computing_device::~computing_device() {};
void computing_device::set_cpu(string _cpu) { cpu = _cpu; }
void computing_device::set_core_count(int _core_count) { core_count = _core_count; }
void computing_device::set_cpu_frequency(double _cpu_frequency) { cpu_frequency = _cpu_frequency; }
string computing_device::get_cpu()const { return cpu; }
int computing_device::get_core_count()const { return core_count; }
double computing_device::get_cpu_frequency()const { return cpu_frequency; }
 
 
class user_device {
public:
    string color;
    double camera_resolution;
    user_device();
    user_device(string _color, double _camera_resolution);
    ~user_device();
    void set_color(string _color);
    void set_camera_resolution(double _camera_resolution);
    string get_color()const;
    double get_camera_resolution()const;
};
user_device::user_device() {}
user_device::user_device(string _color, double _camera_resolution) {
    color = _color;
    camera_resolution = _camera_resolution;
}
user_device::~user_device() {};
void user_device::set_color(string _color) { color = _color; }
void user_device::set_camera_resolution(double _camera_resolution) { camera_resolution = _camera_resolution; }
string user_device::get_color()const { return color; }
double user_device::get_camera_resolution()const { return camera_resolution; }
 
 
class unknown_device : virtual public electronic_device, virtual public computing_device, virtual private user_device {
public:
    double cost;
    unknown_device();
    unknown_device(string _type_battery, double _battery_capacity, double _consume_power, string _cpu, int _core_count, double _cpu_frequency, string _color, double _camera_resolution, double _cost);
    ~unknown_device();
    void set_cost(double _cost);
    double get_cost()const;
};
unknown_device::unknown_device() {};
unknown_device::unknown_device(string _type_battery, double _battery_capacity, double _consume_power, string _cpu, int _core_count, double _cpu_frequency, string _color, double _camera_resolution, double _cost)
    :
    electronic_device(_type_battery, _battery_capacity, _consume_power),
    computing_device(_cpu, _core_count, _cpu_frequency),
    user_device(_color, _camera_resolution) {
    cost = _cost;
}
unknown_device::~unknown_device() {};
 
void unknown_device::set_cost(double _cost) { cost = _cost; }
double unknown_device::get_cost()const { return cost; }
 
class smartphone :public unknown_device {
public:
    string name;
    smartphone(string _type_battery, double _battery_capacity, double _consume_power, string _cpu, int _core_count, double _cpu_frequency, string _color, double _camera_resolution, double _cost, string _name);
    ~smartphone();
    void set_name(string _name);
    string get_name()const;
};
smartphone::smartphone(string _type_battery, double _battery_capacity, double _consume_power, string _cpu, int _core_count, double _cpu_frequency, string _color, double _camera_resolution, double _cost,string _name)
    :
    electronic_device(_type_battery, _battery_capacity, _consume_power),
    computing_device(_cpu, _core_count, _cpu_frequency),
    user_device(_color,_camera_resolution),
    unknown_device(_cost)
{
    name = _name;
}
smartphone::~smartphone() {};
void smartphone::set_name(string _name) { name = _name; }
string smartphone::get_name()const { return name; }
Кроме решения проблемы, если есть недочёты, пишите, с радостью изучу.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.11.2020, 19:01
Ответы с готовыми решениями:

Множественное наследование
Если абстрактный класс A: class A { ...... public: virtual void display(); } От него наследуется класс B:

Множественное наследование
Помогите пожалуйста написать программу.

Множественное наследование
Доброй ночи!:) вот условие http://www.imagepost.ru/images/1/5n/15n_1.jpg каждом класс должен содержать инициализирующие...

1
1 / 1 / 0
Регистрация: 18.11.2017
Сообщений: 102
17.11.2020, 21:08  [ТС]
Возможно ли так сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.11.2020, 21:08
Помогаю со студенческими работами здесь

Множественное наследование
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; using namespace std; class ship { ...

Множественное наследование
// 4.1.cpp: главный файл проекта. #include &lt;stdafx.h&gt; #include &lt;iostream&gt; #include &lt;string.h&gt; #include &lt;locale&gt; #include...

Множественное наследование
Имеется множественное наследование в виде треугольника. Если в обоих базовых классах имеются поля с одинаковым названием и смыслом, может...

Множественное наследование
Как создать нового наследника из базового класса и наследника базового класса?

Множественное наследование
Друзья прошу помочь разобраться, как получить доступ из массива J, к методу (O) из класса (С) #include &lt;iostream&gt; using...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru