|
Доступ к методам (функциям) класса., Выбор оптимального способа |
|
|
|
Oct 13 2008, 21:44
|

Частый гость
 
Группа: Свой
Сообщений: 105
Регистрация: 6-01-06
Пользователь №: 12 901

|
Допустим: - имеются два класса TOne и TTwo; - в TOne определена ф-ция FuncOne(); - классы определены в разных единицах компиляции (файлах); - созданы объекты (глобальные) этих классов (mOne и mTwo) в третьем файле - "main.cpp". Вопрос: Как из класса TTwo получить доступ (использовать) функцию FuncOne() класса TOne? 1. наследовать TOne в TTwo 2. перед описанием класса TTwo объявить объект классаа TOne: extern TOne mOne. 3. ...? ... А если таких "вложений" больше? (Т.е. функции TTwo, использующие TOne, необходимы в TThree) Что лучше? Как правильнее? Есть ли разница в испозовании стека? Прим. Например: TOne - класс описывающий работу с индикатором (LCD), а TTwo - класс формирования данных для вывода на индикатор. Рассматривается ситуация одного процесса (не RTOS). Прим.1 Вопрос задаю здесь, так как обсуждение темы о выделении раздела форума для "чистого" программирования, увы, ни к чему не привело.  Господа Админы/Модераторы извините, просмотрел..
|
|
|
|
|
 |
Ответов
|
Oct 14 2008, 08:12
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(Stas633 @ Oct 14 2008, 04:44)  Что лучше? Как правильнее? Есть ли разница в испозовании стека?
Прим. Например: TOne - класс описывающий работу с индикатором (LCD), а TTwo - класс формирования данных для вывода на индикатор. Рассматривается ситуация одного процесса (не RTOS). Что лучше и правильнее, зависит от задачи. Если один класс является другим + некоторые свои расширения, то имеет смысл наследовать, если один класс содержит функциональность другого, то имеет смысл включить один в другой. Если классы живут сами по себе, то ничего вышесказанного делать не нужно, а общение меж ними организовать на открытой части (public). Для того, чтобы сделать объект глобальным (не важно, какой объект - класса или встроенного типа), нужно объявить объект в одном из исходных файлов, а в одном из заголовочных, который включается во все исходные, объявить этот же объект с квалификатором extern. Тогда объект будет виден и доступен везде, где есть это объявление.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Oct 14 2008, 20:58
|

Частый гость
 
Группа: Свой
Сообщений: 105
Регистрация: 6-01-06
Пользователь №: 12 901

|
Ув. dxp, спасибо за Ваши советы/рекомендации (в другой ветке)!!! ... При внешней схожести С и С++ очень разные языки... ...разные тем, что на них думать надо совсем по-разному... ... Попробуйте думать над программой на уровне объектов реального мира, ..., тогда реализация ляжет на классы почти сама собой... (с) dxpНачал ознакомление с работами Страуструпа и Буча ("настольной книгой", до последнего времени, был "Самоучитель..." Шилдта) и сразу понял, что, используя синтаксис и правила С++, пишу на Си! Отсюда и "проблемы" вида: ".. как сделать функцию доступной.." и т.д. При написании программы я использовал "прямое" наследование для получения доступа к функциям базовых классов. Т.е. при создании объекта производного класса создавался объект/копия базового класса и таких копий было "множество", хотя достаточно одной единственной. Последствия, в виде "нехватки" ОЗУ, очевидны... Отсюда и мой интерес к получению "беззатратного" доступа к "чужим" функциям. Программу нужно писать на С++, а не на Си, изпользуя С++ синтатсис и правила!!  Т.е. начинать нужно с рисования структуры связей и т.д. Спасибо еще раз! Цитата(dxp @ Oct 14 2008, 12:12)  ... Если классы живут сами по себе, то ничего вышесказанного делать не нужно, а общение меж ними организовать на открытой части (public).... Что Вы имеете ввиду? Если не через наследование, то как тогда?
|
|
|
|
Сообщений в этой теме
Stas633 Доступ к методам (функциям) класса. Oct 13 2008, 21:44 igorenja Цитата(Stas633 @ Oct 14 2008, 03:44)
Я ... Oct 14 2008, 05:19  dxp Цитата(Stas633 @ Oct 15 2008, 03:58) Что ... Oct 15 2008, 04:32   Stas633 Цитата(dxp @ Oct 15 2008, 08:32) Или вам ... Oct 15 2008, 08:09    dxp Цитата(Stas633 @ Oct 15 2008, 15:09) В пр... Oct 15 2008, 11:59     Stas633 Цитата(dxp @ Oct 15 2008, 15:59) Словом, ... Oct 15 2008, 12:22     IgorKossak Цитата(dxp @ Oct 15 2008, 14:59) Почему н... Oct 15 2008, 16:10     ?ELF Цитата(dxp @ Oct 15 2008, 17:59) ...
...
... Oct 17 2008, 20:18 alexander55 Цитата(Stas633 @ Oct 14 2008, 01:44)
Ту... Oct 15 2008, 05:19 IgorKossak Цитата(Stas633 @ Oct 14 2008, 00:44) Вопр... Oct 15 2008, 08:38 vik0 Вставлю и я свои 5 копеек
1. Если у Вас TOne - та... Oct 15 2008, 09:39 Stas633 Чтобы не было "гаданий на кофейной гуще... Oct 15 2008, 11:18  bookevg Цитата(Stas633 @ Oct 15 2008, 14:18) Чтоб... Nov 6 2008, 12:45   Stas633 Цитата(bookevg @ Nov 6 2008, 15:45) ...
С... Nov 7 2008, 07:25    Stas633 Поиск "оптимального" решения продолжаетс... Nov 21 2008, 20:03     bookevg Цитата(Stas633 @ Nov 21 2008, 23:03) Поис... Nov 22 2008, 08:28      Stas633 Цитата(bookevg @ Nov 22 2008, 11:28) Я та... Nov 22 2008, 10:09       bookevg Цитата(Stas633 @ Nov 22 2008, 13:09) Сове... Nov 24 2008, 13:51        Stas633 Ув. bookevg, Вы, безусловно, во многом правы! ... Nov 24 2008, 22:08
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|