2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Глобальные переменные
Сообщение07.12.2008, 03:37 


01/11/08
12
Вопрос тривиален, но доступного ответа не смог найти...
В приложении есть несколько форм, и нужно чтобы некоторые переменные были доступны из каждой формы.
Как это реализовать наиболее эффективным способом? Среда - С++, Builder 6
P.S. в Visual Studio была такая штука как Module, но разобраться с ее аналогом в С++ DataModule мне не удалось..
Подскажите, пожалуйста!

 Профиль  
                  
 
 
Сообщение07.12.2008, 11:15 


21/03/06
1545
Москва
Глобальные переменные - плохо, но если автор знает, что делает, тогда вариант №1 - описать переменную в файле Unit1.h, включить этот файл (#include) в файле Unit2.h. Вариант №2 (он мне нравится больше) - описать переменную в Unit1.cpp, в Unit2.cpp написать что-то типа
Код:
extern my_class name;
, где my_class - тип Вашей глобальной переменной, name - ее имя.

 Профиль  
                  
 
 
Сообщение07.12.2008, 17:54 


01/11/08
12
e2e4
Да, второй способ мне больше нравится, им и воспользовался, спасибо большое!
А по поводу DataModule что-то можете сказать?


Да, и такой вопрос... )) Меня, конечно, ещё в школе учили, что глобальными переменными лучше пользоваться по мере необходимости... Ну, а в случае extern, это имеет какие-то свои особенности?

 Профиль  
                  
 
 
Сообщение07.12.2008, 21:24 


21/03/06
1545
Москва
Цитата:
А по поводу DataModule что-то можете сказать?

К сожалению, нет - не знаком.

Цитата:
Да, и такой вопрос... )) Меня, конечно, ещё в школе учили, что глобальными переменными лучше пользоваться по мере необходимости... Ну, а в случае extern, это имеет какие-то свои особенности?

Есть несколько тонкостей, например, хотя в Си константный указатель и имя массива идентичны, но нельзя в одном файле описывать int aaa[20]; а в другом - extern int *aaa; - черевато проблемами. Вообще, конечно, extern - способ сообщить компилятору, что переменная определяется в другом файле, ничего более - все плюсы и минусы глобальных переменных остаются в силе.

 Профиль  
                  
 
 
Сообщение08.12.2008, 05:09 


01/11/08
12
Mono-X
Еще раз спасибо! :)

 Профиль  
                  
 
 
Сообщение08.12.2008, 20:55 


02/09/08
143
А разве нормальные программисты не используют статические поля класса вместо глобальных переменных? В java по-другому не сделаешь, но возможно ли это в c++ - не знаю.

 Профиль  
                  
 
 
Сообщение09.12.2008, 21:43 


01/11/08
12
ha
Не отношусь к классу "нормальных программистов", поэтому и задаю подобные вопросы. В первом сообщении на это было указано :)
По той же причине не знаком со статическими полями классов. Буду признателен, если объясните, что это такое и с чем его едят ;)

 Профиль  
                  
 
 
Сообщение10.12.2008, 00:39 


03/10/06
826
Разве не так?
В одном из файлов CPP:
int m = 0;
В одном из файлов H:
extern int m;
Если переменную нужно использовать в другом файле CPP, то там:
"#include" тот файл H, где "extern int m"
В первом файле CPP также "#include" того файла H.
Или это для "Visual Studio" только верно?

 Профиль  
                  
 
 
Сообщение10.12.2008, 13:50 


30/09/06
68
Одесса
Необходимо в заголовочном файле в классе формы (например, Unit1.h) объявить переменную нужного типа (например, int a;) в разделе объявлений public, а в других модулях (в срр.-файлах других форм, например Unit2) подключить заголовочный файл директивой препроцессора (например, # include Unit1.h, продолжая наш пример). Затем в этих модулях (Unit2.cpp и т.п.) можно использовать объявленную переменную через указатель-объект класса формы (Например, по умолчанию, это Form1): Form1->a. Это в стиле объектно-ориентированного программирования через классы.

 Профиль  
                  
 
 
Сообщение10.12.2008, 20:40 


24/11/08
1
А что вы думаете насчёт использования объекта типа одиночка (Singleton)?

 Профиль  
                  
 
 
Сообщение10.12.2008, 21:48 


01/11/08
12
TopGun
Если это мне адресовано, то я не имею понятия о чем Вы говорите )
В таких тонкостях пока не разбираюсь )

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group