|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
15.08.2011, 09:15 | #1 |
Регистрация: 15.08.2011
Сообщений: 8
|
Видимость полей и методов
Добрый день!
Возникла такая проблема, может кто подскажет. Есть класс Application В нем определены другие классы примерно так: Код:
Теперь вопрос. Нужно добавить еще один объект класса C_Event_Log *Log; Но так, чтобы я мог работать с его методами и полями в объектах MainMenu и Automat. При чем именно передавать данные. Не желательно делать объект этого класса как глобальный. Последний раз редактировалось Stilet; 15.08.2011 в 09:24. |
15.08.2011, 09:40 | #2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Добавить как поле к этим двум или зафрендить.
|
15.08.2011, 09:43 | #3 |
Регистрация: 15.08.2011
Сообщений: 8
|
вот можно по поводу "зафрендить" по подробнее. А то я сколько ни читал про это, а так и не понял как это на практике делается
А по поводу "Добавить как поле к этим двум", то так не получится передать данные из одного в другое. Они не буду видны. |
15.08.2011, 09:59 | #4 |
С++
Форумчанин
Регистрация: 22.09.2008
Сообщений: 791
|
Код:
Форматируйте код, будьте людьми.
|
15.08.2011, 10:39 | #5 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
У вас явно ошибка проектирования, не френдить надо, а наследовать или включать нужные поля в ваш класс который будет их использовать.
|
15.08.2011, 10:45 | #6 |
Регистрация: 15.08.2011
Сообщений: 8
|
Так... Я запутался... Я "зафрендил", а как теперь обращаться к методам этого объекта?
Код:
Код:
|
15.08.2011, 11:12 | #7 |
Software Engineer
Участник клуба
Регистрация: 07.04.2007
Сообщений: 1,618
|
Как сказал BOBAH13 - тут не нужно ничего "френдить".
У вас есть класс А (C_Event_Log) и еще два класса B (C_Menu) и С (C_Automat), с которыми должен взаимодействовать класс А. Для реализации взаимодействия есть несколько вариантов: Если классы B и С семантически находятся в отношениях "является" с классом А, то есть классы B и C и являются классом А, то они они должны быть унаследованы от А, а у A в свою очередь должны быть protected поля, тогда B и C смогут с ними работать. Пример: классы параллелограмм и прямоугольник - прямоугольник является параллелограммом, поэтому может быть унаследован от него. Второй вариант - классы семантически находятся в отношениях "содержит". То есть классы B и С содержат класс А, в таком случаи, класс А должен быть полем классов B и С, и эти классы будут делегировать классу А свои функции. Еще один случай отношений "содержит" - если класс А содержит классы B и С, в таком случаи наоборот, класс А делегирует свои функции классам B и C. Как пример - классы самолет и двигатель. Самолет содержит двигатель и делегирует ему выполнение своих функций. Третий вариант - если классы не связаны никакими отношениями, то взаимодействие должно происходить через открытые методы, которые в свою очередь должны работать с закрытыми полями. В общем случаи, все остальное - ошибка проектирования. Есть исключения, которые зависят от специфики архитектуры, но их нужно стараться избегать.
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
|
15.08.2011, 11:49 | #8 |
Регистрация: 15.08.2011
Сообщений: 8
|
бррр... наверно я не очень умный, потому что слабо что понял. Особенно слово "семантически"
Понял только то, что надо либо классы В и С наследовать классу А, либо наоборот, либо вообще объявить класс C_Event_Log как глобальный объект и тогда пользовать его методы откуда угодно по всей программе. Правильно? |
15.08.2011, 12:20 | #9 |
В стагнации
Участник клуба
Регистрация: 29.07.2011
Сообщений: 1,303
|
Семантика - эт как бы так сказать, показатель поведения и отношений. В нашем случае.
Вообще вам судя по всему надо бы просто наследовать всё это дело Код:
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание. |
15.08.2011, 12:38 | #10 |
Регистрация: 15.08.2011
Сообщений: 8
|
это все понятно! Но будут ли передаваться данные из одного класса в другой.
Класс C_Event_Log у меня реализует журнал аварий и событий. А в классах C_Menu и C_Automat будет использоваться метод класса C_Event_Log для создания конкретных событий или аварий. Т.е. будет вызываться всего один метод Add(), в котором используется очередь FIFO, т.е. метод Add класса C_Event_Log всего лишь добавляет очередное событие в очередь и все!!!! Далее я из основного класса Application буду вызывать метод Run(), который уже во влешь память будет сохранять всю очередь. Так же из класса Application я буду вызывать методы ReadNext(char *); и ReadPrev(char *); класса C_Event_Log для отображения следующего или предыдущего события из флеш памяти. Отсюда следует, что мне надо видеть методы класса C_Event_Log и передавать все данные из классов C_Menu и C_Automat и далее уже с классом будет работать основной класс Application. Фуф... вроде постарался описать понятно... |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Видимость переменной | alexz29 | PHP | 3 | 19.02.2011 12:02 |
видимость переменных и методов в c# | Sparky | Помощь студентам | 5 | 26.07.2010 20:20 |
При удалении записей значения полей с type:=Autoincrement (т.е+) в оставшихся полей не изменяются | kenta | БД в Delphi | 2 | 29.10.2009 08:28 |
Объеденение полей запроса в для отображения нескольких полей в одном списке | mrCreator | Microsoft Office Access | 3 | 08.08.2009 00:53 |
Видимость полей в подчиненной форме | Sparxy | Microsoft Office Access | 2 | 02.06.2009 21:40 |