![]() |
|
Модераторы: bsa |
![]()
|
|
| PashaLost |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 18.1.2008 Репутация: нет Всего: нет |
Попробую описать подробно:
Задача: /* Домашние электроприборы Определить иерархию электроприборов. Включить некоторые в розетку. Посчитать потребляемую мощность. Провести сортировку приборов в квартире на основе одного из параметров. Найти прибор в квартире, соответствующий заданному диапазону параметров */ Мой вариант решения: Класс Electricity(базовый) Класс Network :public Electricity Класс Device:public Electricity Класс DeviceList: public Device В классах Network в DeviceList все функции статические и не создаётся никаких объектов. В классе DeviceList есть массив указателей на класс Device. Объекты класса Device создаются динамически. Проблема: у статических функций класса DeviceList НЕТ доступа к protected полям класса Device и поэтому приходится использовать функции get... Компилятор: error C2248: Device::name: невозможно обратиться к protected член, объявленному в классе "Device"
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
protected поля доступны только через this - по-моему, вполне логично. Даётся доступ только к protected полям только своего экземпляра базового класса.
Если нужен доступ к полям через произвольный указатель, объявите friend DeviceList в Device, нужно также предварительное объявление class DeviceList; А лучше так:
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
1. Зачем класс СписокДевайсов наследован от класса Девайс ?
2. В статической (!!!) ф-ции printList() (читай просто функция, практически находящаяся в namespace DeviceList:: ) идёт обращение к статическому (!!!) массиву указателей на Device (читай просто массиву, НЕ ИМЕЮЩЕМУ ОТНОШЕНИЯ К DeviceList). Почему она должна иметь доступ к членам класса Device ? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
а зачем в DeviceList статические функции ???
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
и вообще, protected переменные - зло
|
|||
|
||||
| PashaLost |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 18.1.2008 Репутация: нет Всего: нет |
СписокДевайсов наследован от класса Девайс как раз с ТОЙ целью, чтобы иметь ДОСТУП к протектед полям Девайса, но раз уж доступ к ним могут иметь ТОЛЬКО экземпляры самого класса, тогда вся затея коту под хвост. Все функции статические только лишь для того, чтобы НЕ заводить объектов классов ДевайсЛист, Електричество и Нетворк. Следуя только своей собственной логике не вижу смысла просто так создавать объекты, которые потом нигде не пригодятся. Сильно не ругайтесь, не забывайте в КАКОМ разделе форума задан вопрос |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
или экземпляры класса наследника. в твоём же примере экземпляра класса наследника, т.е. ДевайсЛиста, не создаётся (т.к. и ф-ция printList() и массив devicePtr() статические, то они не принадлежат ни одному экземпляру класса ДевайсЛист) Это сообщение отредактировал(а) borisbn - 14.10.2011, 12:58 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
класс Devicelist в том виде в каком есть овообще лишняя сущность.. все это уже есть в языке : http://www.cplusplus.com/reference/stl/ http://www.cplusplus.com/reference/algorithm/sort/ http://www.cplusplus.com/reference/algorithm/find_if/ и т.д. |
|||
|
||||
| PashaLost |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 18.1.2008 Репутация: нет Всего: нет |
да да да, я знаю, STL это круто,но в рамках задания была поставлена задача - обойтись без помощи СТЛ
|
|||
|
||||
| mes |
|
||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
можно и без стл.. все равно перепроектировать не мешало бы.. Добавлено @ 19:18
вот например зачем столько гетеров ? да еще и не константных.. гораздо нагляднее было бы :
Это сообщение отредактировал(а) mes - 14.10.2011, 19:48 |
||||||
|
|||||||
| math64 |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Лучше так:
тогда при
не будет копирования структуры. Добавлено через 3 минуты и 43 секунды А при
получишь ошибку компиляции вместо неожиданного поведения - присваивания полю временной структуры. |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
ByCost, By.. и т.д. можно вынести как предикат..вариантов масса, например так : ( с учетом того что это дом задание, как я понял, и опыта у вас пока не много)
теперь можете передавать сравнитель отдельным аргументом в алгоритм сортировки и поиска и задавать нужное поведение.. Добавлено @ 19:49 не лучше, а так и должно оно было быть..спасибо что заметили опечатку Это сообщение отредактировал(а) mes - 14.10.2011, 19:50 |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Вот можно ещё так извратиться:
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
учитывая на каком вопросе споткнулся тс только этого ему для полного счастия не хватает Добавлено через 46 секунд я про nested class.. |
|||
|
||||
| PashaLost |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 18.1.2008 Репутация: нет Всего: нет |
всем отозвавшимся спасибо!!!
Хотел поставить плюсиков, но недостаточно ПРАВ !!! |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |