Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Чем отличаются глобальные и статические переменные?  (Прочитано 10341 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ZWYHB
Участник

ru
Offline Offline

« : 02-01-2010 09:09 » 

 Меня одолевают смутные сомнения
« Последнее редактирование: 02-01-2010 10:25 от Sel » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 02-01-2010 09:18 » 

глобальная переменная видна ВЕЗДЕ, где был инклуд её хедера или extern самой переменной. А статический член класса:

1) переменная -  видна (и является одной и той же) во всех экземплярах данного класса
2) функция - не содержит указателя this , не может быть виртуальной. Может вызываться по имени класса без создания экземпляра класса (A::F())
Записан

Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 02-01-2010 09:20 » 

А в чем собственно вопрос?
Глобальные  - видны везде
Статические  - в пределах объекта или функции
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 02-01-2010 09:32 » 

Не просто в пределах объекта или функции, а во всех объектах данного класса. А в функции локальная статическая переменная будет одна и та же переменная на все вызовы функции (сама функция при этом может быть и не статической)
Записан

ZWYHB
Участник

ru
Offline Offline

« Ответ #4 : 02-01-2010 09:36 » 

Э.. то есть локальные и статические - это одно и тоже?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 02-01-2010 11:02 » 

нет
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 02-01-2010 12:17 » 

сорри за краткость в предыдущем посте, был занят ))


глобальная переменная: экземпляр некоего класса A, единый по всемй программе. Например
Код:
int I; //глобальная переменная

void main()
{
}
откуда бы ни обращались к I , это будет всегда один и тот же экземпляр


статическая переменная и функция в классе
Код:
class A
{
static I;
static int F()
{
}
};



//для вызова функции F создание экземпляра класса необязательно:
int i = A::F();

A a;
i=a.F();

переменная I имеет один единственный экземпляр для ВСЕХ экземпляров класса A. То есть, I даже не входит в состав экземпляров класса A , но имеет область видимости только в нём (хотя доступ можно получить извне через :: или точку)


Записан

ZWYHB
Участник

ru
Offline Offline

« Ответ #7 : 02-01-2010 16:00 » 

Алексей1153++, понятно. Спасибо
Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 02-01-2010 19:22 » 

Глобальные переменные тоже можно делать статическими Ага
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 02-01-2010 20:36 » 

Ребят, уж сразу бы сказали, что это разные понятия!
"Глобальная" - область видимости переменной. Такая переменная доступна из любой части программы.
"Статическая" - метод выделения памяти для хранения значения переменной. Память под переменную выделяется один раз, при запуске приложения.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines