Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Преобразование классов одной иерархии - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Руководство на русском по GCC и g++ http://www.cyberforum.ru/cpp/thread1340662.html
Подскажите по сабжу - надо разобраться с ключами, режимами и понять общую схему работы компиляторов и линковщика. Добавлено через 3 минуты Ещё хорошо бы пример 1 - Компиляция "Hello, World!" в...
C++ Что нужно сделать в этой задаче Помогите понять,что нужно сделать в этой задаче: " Тема:Апроксимация При решении различных задач физики и математики часто бывает необходимо осуществить разложение периодической функции с... http://www.cyberforum.ru/cpp/thread1340448.html
Указать путь к файлу C++
Проблема следующая, нужно чтобы путь к файлу задавался какой-то стандартной функцией, то есть в коде программы у меня указан только один путь, где будет создаваться файл. Существует ли функция,...
Как определить порядок бит в double? C++
Как определить порядок бит в double?
C++ Розв'язування задач обробки масивів http://www.cyberforum.ru/cpp/thread1340012.html
9. У прямокутній матриці кожен нульовий елемент замінити середнім арифметичним значенням ненульових елементів того рядка, в якому розташований даний нульовий елемент. Якщо в рядку декілька нульових...
C++ Розв'язування задач обробки масивів» Скласти програму для підрахунку середнього арифметичного додатніх елементів прямокутної таблиці В, що складається з MN цілих чисел. Сформувати матрицю за допомогою генератора випадкових чисел і... подробнее

Показать сообщение отдельно
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045

Преобразование классов одной иерархии - C++

25.12.2014, 17:01. Просмотров 314. Ответов 2
Метки (Все метки)

Всем привет.

Допустим, есть следующая иерархия классов:
C++
1
2
3
4
5
6
7
8
9
10
11
class B {
   T data;
};
 
class D1 : public B {
  // some D1 spec methods & data
};
 
class D2: public B {
  // some D2 spec methods & data
};
Требуется реализовать метод конвертации D1 <-> D2.
В обе стороны для более общего случая, но можно ограничиться и односторонним преобразованием.

Хочется сделать это элегантно. На текущий момент для рассмотрения есть такие варианты:
1. Сделать свободную функцию (семейство).
2. Добавить в D1 конструктор, принимающий D2 и наоборот.
3. Добавить в D1 метод makeD2. И симметричный в D2.

При вариантах 2,3 придется сделать классы дружественными друг другу, в варианте 1 - добавить дружественную функцию в оба класса.

Была мысль сделать метод доступа к данным в базовом классе protected, но это всё равно не позволит получить доступ в D1 к базовой части, которая содержится в D2.

С одной стороны хотелось бы избавиться от дружественности, с другой - не хочется городить лишних методов доступа.

Если у кого есть идеи на счет реализации подобной конвертации буду рад их услышать.

Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru