Kizi
|
|
1 | |
Без глобальных переменных.22.10.2011, 20:37. Показов 5665. Ответов 23
Метки нет (Все метки)
1.
Код
void __fastcall TForm2::FormClick(TObject *Sender) { TPoint pt; GetCursorPos(&pt); int x = pt.x; int y = pt.y; } Можно ли и как обратится к IDE функции из другой функции что бы узнать значение "x" и "y"? 2. Код
bool fun( int x, int y); { int z; //всякое } Как без объявления глобальной переменной "z", сохранять ее значение, ведь при повторном объявлении значение обнулится? |
22.10.2011, 20:37 | |
Ответы с готовыми решениями:
23
Получить значение переменной из потока без создания глобальных переменных Просмотр значений глобальных переменных при отладке Объявление глобальных переменных для всего проекта Непонятная робота глобальных переменных в разных Юнитах билдера |
40 / 40 / 6
Регистрация: 28.07.2011
Сообщений: 431
|
|
22.10.2011, 20:55 | 2 |
А в чем проблема объявить глобальную переменную?
0
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|
22.10.2011, 21:10 | 3 |
1.TPoint pt, как минимум, можно сделать членом класса.
2. Объявить её используя ключевое слово static. P.S. глобальные переменные, без крайней необходимости, не следует использовать вообще .
1
|
Практикантроп
4840 / 2725 / 533
Регистрация: 23.09.2011
Сообщений: 5,795
|
|
22.10.2011, 21:39 | 4 |
- вопрос дилетанта: "а почему" ?? Я очень часто их использую. И никогда по этой причине не имел неприятностей. Да и логически мне этот тезис непонятен... .
0
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|
23.10.2011, 23:55 | 5 |
nick42, большинство начинающих используют глобальные переменные потому что:
1) "используя" ОО подход абсолютно не понимают, что представляет из себя ООП как таковое 2) чтобы побыстрее справиться с той или иной задачей, просто объявляют переменные "где попало" Это что касается частого использования глобальных перменных... А так, совет один: пользуйся поиском. В сети немало статей на тему "почему глобальные переменные это плохо".
0
|
24.10.2011, 00:22 | 6 | |||||
почитайте, что пишет про глобальные переменные Крис Касперски, может, не все так однозначно
0
|
Практикантроп
4840 / 2725 / 533
Регистрация: 23.09.2011
Сообщений: 5,795
|
||||||
24.10.2011, 14:08 | 7 | |||||
Тогда вопрос второй от дилетанта: "а зачем"? Зачем мне поиском собирать статьи на тему глобальных переменных? Я обычно, как всякий словянин, начинаю шевелиться тогда, когда ощущаю дискомфорт. Вот сегодня я где-то за час написал программу на Билдере (это в теме "Движение разных... Движение разных Image (не могу продумать реализацию) ). Вот её начало:
0
|
24.10.2011, 21:11 | 8 |
а поискать все же стоило, Касперски как раз и пишет, что глобальные переменные - такие же переменные, как и все , вот и не было бы сердитого монолога от nick42
единственное, с чем я согласен относительно глобальных переменных - это не запутаться, где, какая и к чему относится
0
|
Практикантроп
4840 / 2725 / 533
Регистрация: 23.09.2011
Сообщений: 5,795
|
|
24.10.2011, 21:26 | 9 |
:dance3: - почему же "сердитого"?! Я только за то, чтобы начинающие программисты впитывали как можно больше знаний, но при этом не отрывались бы от земли (помнили о поставленной задаче) . В конечном счёте в программировании важна красота решения. А достичь его (решение) можно ведь разными путями.
1
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|
24.10.2011, 22:15 | 10 |
Я не знаю, что там пишет Крис Касперски, но глобальные переменные НЕ "такие же переменные, как и все". А если говорить об ООП, то такое понятие как глобальная переменная в нём отсутствует вообще. Я не против глобальных переменных как таковых, я просто пытаюсь объяснить, что их использование очень часто свидетельствует о низкой квалификации программиста, т.к. они используются там, где их использование является абсолютно неуместным.
0
|
24.10.2011, 22:35 | 11 |
1. это печально
2. предложите альтернативу 3. где их использование является уместным ?
0
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|
25.10.2011, 00:20 | 12 |
1. Честно говоря, не совсем понимаю, какое отношение тематика написанных им книг имеет к обсуждаемой теме...
2. Для начала, разобраться с тем, что из себя представляет ООП. 3. Cложно с ходу ответить на этот вопрос... Скажем, какие-нибудь общедоступные константы(например, число ПИ).
0
|
25.10.2011, 00:36 | 13 |
т.е., по сути вопроса ответа нет, печально...
0
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|
25.10.2011, 00:48 | 14 |
Я ответил тебе абсолютно по сути... Ладно попробуем подойти с другой стороны: читал ли ты таких авторов как Скотт Майерс, Герб Саттер... И какие книги по ООП ты прочёл(в том числе и по паттернам проектирования)?
0
|
518 / 306 / 58
Регистрация: 30.07.2008
Сообщений: 607
|
|||||||||||
25.10.2011, 00:48 | 15 | ||||||||||
Сообщение было отмечено как решение
Решение
для начала Глобальная переменная - это то что доступно всем функциям и классам
потом - если делать переменную членом класса - она тоже "глобальная", но распространяется на класс порадивший ее вот мой пример: в любое время можно узнать что где, и как =)
а по теме: непонятно когда вызывается fun( int x, int y); 1) если сразу после нажатия то и передавать fun(tp.x, tp.y); 2) можно использовать указатель 4) можно вообще в Edit1 хранить xD xD xD (кстати, вот и без глобальных переменных)
3
|
25.10.2011, 01:09 | 16 |
1. довольно расплывчастым был ответ
2. чукча - не читатель ... чукча - писатель ... ... хватит того, что ты читал и Майерса, и Скотта , и ихнее мнение, имхо, как и все остальное, "не догма, а руководство к действию", хотя я сомневаюсь, что ты знаешь, кто это сказал
1
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|
25.10.2011, 01:22 | 17 |
Все эти флаги состояния и т.д. в виде глобальных переменных это процедурный подход, не объектно-ориентированный.
0
|
25.10.2011, 01:27 | 18 |
наверное, вам одному понятен вырванный из контекста кусок кода
в отличие от вас, уважаемый, буду более конкретным:
0
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|
25.10.2011, 01:56 | 19 |
Расплывчатым, на самом деле, является не мой ответ, а вопросы которые ты задаешь. Сама твоя постановка вопроса говорит о том, что ты не очень разбираешься в теме. Т.е. для того чтобы ответить на твой вопрос вроде "что применять в качестве альтернативы глобальным пременным" мне прдётся объяснять тебе основы ООП...
Я абсолютно не понял к чему этот выпад и переход на личности... Будем считать, что это попытка хоть как-то сохранить лицо в виду отсутствия аргументов. По сути: да, я читал книги данных(и не только) авторов. А тем, у кого уровень гонора, не соответствует уровню заний, я крайне советую прочесть не только упомянутых выше авторов, но и какую-нибудь книгу по объектно-ориентированному программированию.
0
|
Диссидент
27707 / 17325 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
|
|
25.10.2011, 02:01 | 20 |
Сообщение было отмечено как решение
Решение
Этот диспут напоминает мне старинный спор про goto
Из своего скромного опыта могу сказать. а) Иногда без глобальных - ну никак. Если некоторые данные пронизывают всю задачу, замучаешься передавать их параметрами. б) Глобальные переменные - лишняя головная боль и источник странных ошибок. Например, сначала ты ее объявил, как int, а потом она стала double, где-то забыл поправить - дальше ясно... в) Транслятор не ловит неиспользование глобальных переменных, а я страх как не люблю "мусора" г) VCL первым делом создает глобальную TForm1 *Form1, так что ООП тоже не чужд глобальности. Вывод. Надо каждый раз подумать, а можно ли обойтись без глобальности. Предпочитаю по возможности использовать static. Ее использование хотя бы ограничено пределами одного модуля. Легче отследить смысл и использование. Но если кому-то комфортно иметь дело с глобальными переменными - да пусть ему будет хорошо!
3
|
25.10.2011, 02:01 | |
25.10.2011, 02:01 | |
Помогаю со студенческими работами здесь
20
Обойтись без использование глобальных переменных Массив (переписать без глобальных переменных) Быстрая сортировка без глобальных переменных Исправить без использования глобальных переменных Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |