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

Продолжение цепочки наследования без дублей базовых классов

26.10.2014, 15:10. Показов 4284. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class A
{
public:
    A();
    int x;  
};
 
class B : public A
{
public:
    B();
};
 
class C : public B
{
public:
    C();
};
Вот допустим делаю так:
C++
1
2
B* bObj = new B;
b->x = 777;
при этом создаются в памяти объект базового класса A и объект дочернего класса B, верное? Верно.
Теперь вопрос!
Хочу создать объект класса С
C++
1
C* cObj = new C;
чтоб этот объект имел один в один базовые классы, такие же как в предыдущей цепочке, то есть чтоб базовым классом объект cObj был именно объект bObj, то есть проинициализированный ранее уже объект класса B, ну соответственно чтоб А то же был такой же.

Грубо говоря, есть объект bObj (в памяти объект класса B и объект класса A), теперь хочу без создания лишних классов в памяти присоединить объект к этой цепочке наследования, то есть хочу её просто продолжить и добавить объект С, который будет являться наследником уже проинициализированного объекта B, чтоб в памяти было только А, B и C. Как такое можно сделать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.10.2014, 15:10
Ответы с готовыми решениями:

Структура наследования базовых/производных классов: error LNK 1104
Может быть проблема, если я неправильно что-то записал в структуре наследования базовых/производных классов?

Вынести методы из классов Panel и PictureBox (явная реализация методов базовых абстрактных классов)
Тема: Множественное наследование. Явная реализация методов базовых абстрактных классов. Как вынести методы из классов Panel и...

Ошибка в инициализации базовых классов
Привет. Пишу код из книги Лафоре. #include <iostream> using namespace std; #include <windows.h> enum posneg {pos, meg}; class...

23
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
26.10.2014, 18:35
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Вот смотрите, я же могу из класса B получить класс С дайнкастингом, который будет является продолжением цепочки, то есть привести класс B к классу С даунгрейдом )) ? Как это правильно сделать, чтоб при этом память правильно алоцировалась под класс С ?
Если нечто, на что указывает B *, на самом деле не содержит в себе класс С, то просто так скастить B * -> C * нельзя. Проверить, возможен ли такой каст, можно через dynamic_cast.
Как мне кажется, в твоей задаче достаточно хранить списки "наследников", вместо наследования типов С++. В С++ наследование не предполагает динамического разделения базы между разными объектами наследников, поэтому напрямую механизм наследования для этого использовать не получится. Тут на форуме где-то уже была такая тема и я там подробно высказывался - поищи.
1
Заблокирован
26.10.2014, 18:43  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Если нечто, на что указывает B *, на самом деле не содержит в себе класс С, то просто так скастить B * -> C * нельзя.
А нет ли какой - то конструкции, чтоб если С не содержится в В, чтоб память алоцировалась бы под класс С и он автоматов добавился бы в В и получилось, что он там как бы есть ?
Цитата Сообщение от DrOffset Посмотреть сообщение
Как мне кажется, в твоей задаче достаточно хранить списки "наследников", вместо наследования типов С++
тогда запись будет: наследник->то что мне нужно, или наследник наследника->наследник->то что мне нужно - ерунда в общем.
Цитата Сообщение от DrOffset Посмотреть сообщение
В С++ наследование не предполагает динамического разделения базы между разными объектами наследников, поэтому напрямую механизм наследования для этого использовать не получится.
Вот это уже осиновый кол в мой замысел
Цитата Сообщение от DrOffset Посмотреть сообщение
Тут на форуме где-то уже была такая тема и я там подробно высказывался - поищи.
А там решение было найдено? Как я найду эту тему?
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
26.10.2014, 19:57
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Как я найду эту тему?
Я нашел. И кажется этот вопрос поднимал ты. Но тебе тогда мое решение не понравилось, может быть ты сейчас на него другими глазами посмотришь?
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
А нет ли какой - то конструкции, чтоб если С не содержится в В, чтоб память алоцировалась бы под класс С и он автоматов добавился бы в В и получилось, что он там как бы есть ?

Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
тогда запись будет: наследник->то что мне нужно, или наследник наследника->наследник->то что мне нужно - ерунда в общем.
Синтаксического сахарку можно всегда добавить. Здесь нужно понять одну простую вещь: наследование в С++ применяется к типам, т.е. это отношение типов, статическое отношение. А ты хочешь отношение объектов, ты хочешь, чтобы один базовый объект был общим для нескольких других объектов. Это динамическое отношение, отношение объектов. В С++ такое реализуется через указатели на нужные объекты. Базовый может содержать список указателей своих дочерних, а дочерние, список своих дочерних и т.д. В то же время, каждый объект может содержать указатель на базовый объект. Получается дерево - иерархия.
1
Заблокирован
26.10.2014, 21:33  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
И кажется этот вопрос поднимал ты

Да тут можно организовать гиперграф объектов, но ведь тут вся фишка в том, что:
Цитата Сообщение от newbie666 Посмотреть сообщение
- видишь, много стрелочек -> Тоесть неудобно, я хотел работать вообще без стрелочек, еслиб данные были как бы унаследованны в в класс....

думаю надо ваще пересматривать архитектуру, т.к. в С++ нельзя подменять таблицы виртуальных символов вручную, что не может не огорчать.
Так что
Цитата Сообщение от newbie666 Посмотреть сообщение
ладно- надоело спасибо.. я спать ))))


Добавлено через 1 час 14 минут
В общем я примерно понял в какую сторону двигаться. Для конструирования подобных объектов используется идиома виртуальных конструкторов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.10.2014, 21:33

Наследование функций базовых классов
Здравствуйте! Изучаю С++ по книге Р. Лафоре ООП С++ Примеры из главы 9 "Наследование" ставят меня в тупик: // counten.cpp ...

Использование базовых и производных классов
Не могу решить задачу с классами помогите с решением. Создать класс String – строка. Определить функции присваивания одной строки...

Класс наследуемый от двух базовых классов
Друзья Являеться ли класс (А)- Классом наследуемым от двух базовых классов? Если не правильно то как нужно написать ?.Помогите врозумить...

Множественное наследование с использованием абстрактных базовых классов
тема: Множественное наследование с использованием абстрактных базовых классов, файлового ввода-вывода с применением потоков С++, функций...

Нюансы использования абстрактных базовых классов (класс Shape)
У меня класс Point наследуется с абстрактного базового класса Shape, и Point тоже абстрактный, поскольку не определил функцию get_area()....


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
Текстовый слайдер с нумерацией страниц и кроссбраузерность.
russiannick 18.07.2026
Один мой друг написал текстовый слайдер с нумерацией страниц. Сегодня я расскажу как он умудрился подружить его с кроссбраузерностью. Очевидно сложно угодить с шириной каждому браузеру. Один крадет. . .
Грибы - это мемы, дерево - это человек. Применение микоризной модели к теории меметики Докинза.
anaschu 18.07.2026
Меметический изоморфизм теории «всего»: Грибная сукцессия как модель эволюции идей Докинза Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а универсальную. . .
Грибы - это корпорации, деревья - это государства. Механизм массонского захвата власти
anaschu 18.07.2026
Макроэкономический изоморфизм теории «всего»: Грибная сукцессия как модель транснационального капитализма Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru