Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Описание классов, ссылки друг на друга 
V
    Опции темы
ecspertiza
Дата 14.11.2011, 12:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 1
Всего: 5



Есть задача, описать два класса таким образом что бы у класс А была ссылка на класс Б и на оборот. Пробую сделать через шаблоны, следующим образом

http://liveworkspace.org/code/3a9490c197e7...87c9e86045610da

но что то не выходит, оно и понятное дело тот класс что объявлен первым ничего не знает про второй. Как быть в такой ситуации ? Может есть какой то паттерн ?

Добавлено через 6 минут и 59 секунд
Совсем забыл про

http://liveworkspace.org/code/c11d49465c05...6017107e3ce338e

тему можно закрыть, спасибо

Это сообщение отредактировал(а) ecspertiza - 14.11.2011, 12:29


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
newbee
Дата 14.11.2011, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 4
Всего: 19



Цитата(ecspertiza @  14.11.2011,  13:28 Найти цитируемый пост)
Совсем забыл про
Если бы речь шла именно о ссылках (а не указателях), можно было бы так:
Код

class c1;
class c2;

class c1{
public:
 c1(c2 const &cc,int v):c(*const_cast<c2*>(&cc)),x(v){}
 c2 &c;
 int x;
};

class c2{
public:
 c2(c1 const &cc,int v):c(*const_cast<c1*>(&cc)),y(v){}
 c1 &c;
 int y;
};

int main(int argc,char **argv){
 c1  x(c2(x,2),1);
 c2& y=x.c;
 printf("%d %d\n",x.x,y.y);
 return 0;}



--------------------
You're face to face
With man who sold the world
PM   Вверх
ecspertiza
Дата 14.11.2011, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 1
Всего: 5



да, немного не так выразился, здесь хранение указателей, но за пример все равно спасибо smile


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
boostcoder
Дата 14.11.2011, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



не люблю я классы, которые "знают" друг о друге... самое время выявить общее, и вынести это общее в один базовый класс, который у будет предком для этих двух.

Добавлено через 13 минут и 45 секунд
Цитата(boostcoder @  14.11.2011,  13:02 Найти цитируемый пост)
который у будет предком для этих двух.

ну или они будут ссылаться на этот общий объект.
PM WWW   Вверх
newbee
Дата 14.11.2011, 13:20 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 4
Всего: 19



boostcoder, фу! Чрезмерное наследование, когда втупую выявляют общее, - это плохо! Это очень плохо! Композиция - вот это хорошо!


--------------------
You're face to face
With man who sold the world
PM   Вверх
boostcoder
Дата 14.11.2011, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



я больше не буду
PM WWW   Вверх
ecspertiza
Дата 14.11.2011, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 1
Всего: 5



Просто нужно реализовать, взаимосвязь платформы и конфигурации. То есть платформа должна знать о поддерживаемых конфигурациях, а конфигурация о поддерживаемых платформах. Не придумал более правильного решения, но то что есть на мой взгляд, вполне подойдет.


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
mes
Дата 14.11.2011, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(newbee @  14.11.2011,  11:41 Найти цитируемый пост)
 c1(c2 const &cc,int v):c(*const_cast<c2*>(&cc)),x(v){}
 c2 &c;

и однажды  бааа...бах  smile 

Это сообщение отредактировал(а) mes - 14.11.2011, 16:34


--------------------
PM MAIL WWW   Вверх
baldina
Дата 14.11.2011, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Цитата(ecspertiza @  14.11.2011,  12:28 Найти цитируемый пост)
но что то не выходит, оно и понятное дело тот класс что объявлен первым ничего не знает про второй

дело то не в этом, просто второй класс использовался без шаблона
Цитата

error: type/value mismatch at argument 1 in template parameter list

но как только это начнешь поправлять, появится другая проблема: получается рекурсивное определение класса, размер объекта равен бесконечности. в случае шаблонов потребуется бесконечно рекурсивный шаблон, что тоже невозможно
http://liveworkspace.org/code/f57f9489dce3...ea9cb4dfeb96144

Цитата(boostcoder @  14.11.2011,  13:02 Найти цитируемый пост)
не люблю я классы, которые "знают" друг о друге

 smile

Добавлено через 4 минуты и 21 секунду
Цитата(newbee @  14.11.2011,  13:20 Найти цитируемый пост)
boostcoder, фу! Чрезмерное наследование, когда втупую выявляют общее, - это плохо! Это очень плохо! Композиция - вот это хорошо! 

newbee, Ваша позиция ясна и уважаема. Но что Вы скажете про закрытое наследование? ведь это сугубо технический приём, в т.ч. когда "втупую выявляют общее"
PM MAIL   Вверх
newbee
Дата 14.11.2011, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 4
Всего: 19



Цитата(mes @  14.11.2011,  17:34 Найти цитируемый пост)
и однажды  бааа...бах
В данном случае это просто борьба с языком. Но при неумелом пользовании, да, бабахнет ))


--------------------
You're face to face
With man who sold the world
PM   Вверх
newbee
Дата 14.11.2011, 17:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 4
Всего: 19



Цитата(baldina @  14.11.2011,  17:43 Найти цитируемый пост)
 что Вы скажете про закрытое наследование?
Да нет, я вообще не против наследования как такового, и сама им пользуюсь. Но дело в том, что многие им слишком увлекаются, доходит до маразма: берем два объекта: палка и палец; безусловно им пресущи некоторые общие свойства, но значит ли это, что их нужно наследовать от общего (общих?) интерфейса? Не будем останавливатьяс на частных случаях вроде рисования, нам просто нужно описать эти объекты.


--------------------
You're face to face
With man who sold the world
PM   Вверх
baldina
Дата 14.11.2011, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



э-э... ну если мы будем считать и палку и палец на прочность как балочную конструкцию, то почему нет  smile 
шутка
PM MAIL   Вверх
ecspertiza
Дата 14.11.2011, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 1
Всего: 5



Цитата(boostcoder @  14.11.2011,  13:02 Найти цитируемый пост)
не люблю я классы, которые "знают" друг о друге


Собственно назревает вопрос почему ? и как тогда в такой ситуации быть ? Ну это так для понимания, чтоб на грабли не наступить smile

Это сообщение отредактировал(а) ecspertiza - 14.11.2011, 17:12


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
baldina
Дата 14.11.2011, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



ecspertiza, в случае с указателями это нормально, ничего криминального. что бы сказать точнее, надо знать задачу
PM MAIL   Вверх
ecspertiza
Дата 14.11.2011, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 1
Всего: 5



Цитата(baldina @  14.11.2011,  17:17 Найти цитируемый пост)
ecspertiza, в случае с указателями это нормально, ничего криминального


Хорошо, что статьи за это дело нету smile

А задача следующая, необходимо софту обновления поставить, софт в лучшем случае состоит из двух частей, это платформа и конфигурация. При этом они связаны, то есть каждая платформа должна знать список поддерживаемых конфигураций, а каждая конфигурация список поддерживаемых платформ. Стало быть классы Config и Platform в моем случае описывают и одно и другое.  Думаю в данном случае решение нормальное, один класс содержит список указателей на объекты другого.


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0873 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.