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

C++

Войти
Регистрация
Восстановить пароль
 
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
#1

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

25.12.2014, 17:01. Просмотров 304. Ответов 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.

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

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

Заранее спасибо.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2014, 17:01     Преобразование классов одной иерархии
Посмотрите здесь:

Сохранить в одной коллекции несколько объектов классов одной ветви иерархии - C++
Написала программу с иерархией. Для её демонстрации нужно написать 2 класса-коллекции. Но у меня не получается коллекционировать в одной...

Разработка иерархии классов - Visual C++
Розробка ієрархії класів «Торгівельна мережа комп’ютерної техніки». Розробити ієрархічну систему класів, що визначає торговельну мережу...

Цепочка иерархии классов - C++
Какой доступ будет в цепочке protected - public - protected? ...

организация разветвленной иерархии классов - C++
Цель: организовать разветвленную иерархию классов с применением абстрактных классов. Нужна помощь в разъяснении самого задания ...

Затрудние в названии иерархии классов - C++
Здравствуйте камрады. Помогите обозвать иерархию классов, в голову ничего толкового не приходит. struct Card1 { std::string...

Связанный список для иерархии классов - C++
Есть иерархия классов точка-&gt;треугольник-&gt;треугольник в треугольнике. Всю эту муть нужно хранить в связанном списке. Как я понял, если...

Найти ошибку в иерархии пользовательских классов - C++
Есть класс &quot;Дата&quot;, есть класс &quot;Работник&quot; который имеет поле &quot;Дата&quot;, и есть класс &quot;Компания&quot; который включает в себя массив работников. В...

Реализ иерархии классов и соответствующих им методов! - C++
Привет всем! Срочно нужна помощь в написании программы! Необходимо реализовать иерархию таких классов, как Точка - Единичный вектор -...

Взаимодействие между объектами единой иерархии классов - C++
Здравствуйте. У меня есть некоторый базовый класс window, который создает &quot;окно&quot; и представляет функции доступа к нему для производных...

Виртуальные функции при создании иерархии классов - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; class var{ int temperatura; float shirina; public: virtual...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
retmas
Жарю без масла
859 / 741 / 164
Регистрация: 13.01.2012
Сообщений: 1,694
25.12.2014, 20:49     Преобразование классов одной иерархии #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
class B {
    T data;
 
public:
    B() : data() {}
    B(const B& b) : data(b.data) {}
};
 
class D1 : public B {
  // some D1 spec methods & data
public:
    D1() {}
    D1(const B& b) : B(b) {}
};
 
class D2: public B {
  // some D2 spec methods & data
public:
    D2() {}
    D2(const B& b) : B(b){}
};
 
int main()
{
    D1 d1;
    D2 d2(d1);
    d1 = d2;
}
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
25.12.2014, 22:44  [ТС]     Преобразование классов одной иерархии #3
retmas, почти оно. Немного подправил:
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
class B {
    T data;
public:
    B() : data() {}
    B(const B& b) : data(b.data) {}
};
 
class D2;
 
class D1 : public B {
  // some D1 spec methods & data
public:
    D1() {}
    D1(const D2& d);
};
 
class D2: public B {
  // some D2 spec methods & data
public:
    D2() {}
    D2(const D1& d) : B(d) {
        // convert D1 spec data
    }
};
 
D1::D1(const D2& d) : B(d) {
    // convert D2 spec data
} 
 
int main()
{
    D1 d1;
    D2 d2(d1);
    d1 = d2;
}
Yandex
Объявления
25.12.2014, 22:44     Преобразование классов одной иерархии
Ответ Создать тему
Опции темы

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