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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с ООП 
:(
    Опции темы
AndreyVN
Дата 2.9.2004, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 25.6.2004
Где: Здесь, в Волгогра де

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



Привет,

Люди, я всегда писал в процедурном стиле, теперь начал производить классы и сразу сталкнулся с проблемой:

Создаю базовый класс TPort - здесь физический уровень работы с портом,
от него произвожу class TDevice: public TPort - здесь система команд устройства.

Все хорошо, все работает. А теперь, вдруг несколько однотипных устройств вешается на один ком порт. butbut.gif

Как толко говорю Device[i] = new TDevice(); так сразу производится еще один экземпляр базового класса TPort. А мне надо, чтобы для нескольких TDevice один экземпляр TPort был.

Как выкрутиться?
PM   Вверх
Олег М
Дата 2.9.2004, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(AndreyVN @ 2.9.2004, 18:22)
чтобы для нескольких TDevice один экземпляр TPort был.

Тут надо не наследоваться, а вот так
Код

class TPort
{
};

class TDevice
{
public:
TDevice(TPort &port):m_port(port) {;}
protected:
TPort &m_port;
};


PM MAIL ICQ   Вверх
Dark Elf
Дата 2.9.2004, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 9
Всего: 10



Используй синглетон
Синглетон - это паттерн проектирования такой.
Вообще если уж ты занялся ООП то мой тебе совет - займись изучением паттернов проектирования (а кому счас легко smile.gif)
Самая лучшая книга по паттернам на мой взгляд - Э.Гаммы и компании (http://www.rsdn.ru/res/book/oo/design_patterns.xml)
Подробности о том как реализовать синглетон в С++
http://www.rsdn.ru/res/book/cpp/alex.xml - её также можно скачать в электронном виде с anatolix.naumen.ru
Удачи smile.gif





--------------------
PM MAIL WWW ICQ Skype GTalk Jabber MSN   Вверх
chipset
Дата 2.9.2004, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



Dark Elf
Ой....smile.gif
Я бы спроектировал так:
Код

class TPort
{
public:
std::vector<TDevice*> m_pDevices; //Как бы динамический массив ссылок на обьекты
int m_nNumOfDevices;//и кол-во обьектов в нём
};
class TDevice //Чисто абстрактный класс  :inlove
{
public:
int m_Type;//Тип девайса
..//ещё какая нибудь фигня..
void virtual Work() = 0;//Полностью чистая функция
};
#define COFFEE_DEVICE 0xc0f
class TCoffeeDevice: TDevice
{
TCoffeeDevice()
{
m_Type = COFFEE_DEVICE;//определение типа
}
void virtual Work()
{
//делаем что нибудь
}

};
//просто какой то девайс, убил бы Punto Switcher >:-E

ТЕперь просто добавляем в TPort девайсы разных типов (поскольку основание у них
одинаковое они могут сохраняться) извлекаем, проверяем m_Type и где то в таком роде копаем дальше....
ЗЫ.
Где то легко могу ошибиться, учусь ещё только withstupid.gif
..
ЗЫ.
Какая ж у нас красивенькая подсветка tounge.gif inlove.gif

Это сообщение отредактировал(а) chipset - 3.9.2004, 00:48


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
AndreyVN
Дата 3.9.2004, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 25.6.2004
Где: Здесь, в Волгогра де

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



Вот спасибо, не ожидал что столько вариантов может быть.
PM   Вверх
srd
Дата 3.9.2004, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


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

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



А если нужно наследование TDevice от TPort, то можно базовый класс TPort сделать виртуальным.


--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0685 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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