2014 dxdy logo

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

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




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

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

 
 
 
 
Сообщение07.12.2008, 17:54 
e2e4
Да, второй способ мне больше нравится, им и воспользовался, спасибо большое!
А по поводу DataModule что-то можете сказать?


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

 
 
 
 
Сообщение07.12.2008, 21:24 
Цитата:
А по поводу DataModule что-то можете сказать?

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

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

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

 
 
 
 
Сообщение08.12.2008, 05:09 
Mono-X
Еще раз спасибо! :)

 
 
 
 
Сообщение08.12.2008, 20:55 
А разве нормальные программисты не используют статические поля класса вместо глобальных переменных? В java по-другому не сделаешь, но возможно ли это в c++ - не знаю.

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

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

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

 
 
 
 
Сообщение10.12.2008, 20:40 
А что вы думаете насчёт использования объекта типа одиночка (Singleton)?

 
 
 
 
Сообщение10.12.2008, 21:48 
TopGun
Если это мне адресовано, то я не имею понятия о чем Вы говорите )
В таких тонкостях пока не разбираюсь )

 
 
 [ Сообщений: 11 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group