Статическая переменная в методе...
От: Mckey Россия  
Дата: 10.04.08 11:40
Оценка:
Я конечно не большой знаток в С++, но тут меня зацепило...
Один человек утверждает что создав статическую переменную в методе класса — она будет видна только в этом методе этого класса — прав ли он или нет?

Пример (если есть какие либо ошибке в написании прошу простить — на с++ не пишу):

class Sample
{
  void Method()
  {
    static int var = 0;
    var++;
  }
  void OtherMethod()
  {
    var--;
  }
}


т.е. Создав статическую переменную var в методе Method, мы будем иметь к ней доступ только в этом методе и ни в каком другом — например OtherMethod?
Делай добро и бросай его в воду...
Re: Статическая переменная в методе...
От: jazzer Россия Skype: enerjazzer
Дата: 10.04.08 11:43
Оценка:
Здравствуйте, Mckey, Вы писали:

M>Я конечно не большой знаток в С++, но тут меня зацепило...

M>Один человек утверждает что создав статическую переменную в методе класса — она будет видна только в этом методе этого класса — прав ли он или нет?

даже хуже — это относится к любому имени, объявленному локально внутри функции
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: Статическая переменная в методе...
От: php-coder Чехия http://slava-semushin.blogspot.com
Дата: 10.04.08 11:43
Оценка:
Здравствуйте, Mckey, Вы писали:

M>Я конечно не большой знаток в С++, но тут меня зацепило...


Конкретно этот вопрос не специфичен для С++, потому как также относится и к Си.

M>Один человек утверждает что создав статическую переменную в методе класса — она будет видна только в этом методе этого класса — прав ли он или нет?


Думаю, что прав.

M>т.е. Создав статическую переменную var в методе Method, мы будем иметь к ней доступ только в этом методе и ни в каком другом — например OtherMethod?


Насколько понимаю, да.
Re: Статическая переменная в методе...
От: Bell Россия  
Дата: 10.04.08 11:47
Оценка:
Здравствуйте, Mckey, Вы писали:

M>Я конечно не большой знаток в С++, но тут меня зацепило...

M>Один человек утверждает что создав статическую переменную в методе класса — она будет видна только в этом методе этого класса — прав ли он или нет?

Да, прав. Функция-член в этом смысле не отличается от обычных функция — локальная статическая переменная видна только в месте определения.

M>Пример (если есть какие либо ошибке в написании прошу простить — на с++ не пишу):

M>
M>class Sample
M>{
M>  void Method()
M>  {
M>    static int var = 0;
M>    var++;
M>  }
M>  void OtherMethod()
M>  {
M>    var--;//Ошибка: Переменная var здесь недоступна
M>  }
M>}
M>
Любите книгу — источник знаний (с) М.Горький
Re[2]: Статическая переменная в методе...
От: alzt  
Дата: 10.04.08 12:47
Оценка:
Здравствуйте, Bell, Вы писали:

M>>Я конечно не большой знаток в С++, но тут меня зацепило...

M>>Один человек утверждает что создав статическую переменную в методе класса — она будет видна только в этом методе этого класса — прав ли он или нет?

B>Да, прав. Функция-член в этом смысле не отличается от обычных функция — локальная статическая переменная видна только в месте определения.


M>>Пример (если есть какие либо ошибке в написании прошу простить — на с++ не пишу):

M>>
M>>class Sample
M>>{
M>>  void Method()
M>>  {
M>>    static int var = 0;
M>>    var++;
M>>  }
M>>  void OtherMethod()
M>>  {
M>>    var--;//Ошибка: Переменная var здесь недоступна
M>>  }
M>>}
M>>


Прав.
Область видмости этой переменной — этот метод.
Время жизни — такое же, как и у остальных статических переменных.

Если кто-то объявил переменную подобным образом, значит за пределами метода никто не должен знать о существовании этой переменной.
Re[3]: Статическая переменная в методе...
От: alzt  
Дата: 10.04.08 12:48
Оценка:
Здравствуйте, alzt, Вы писали:

Я отвечал Mckey-ю, сообщение не там создал.
Re: Статическая переменная в методе...
От: rg45 СССР  
Дата: 10.04.08 20:46
Оценка:
Здравствуйте, Mckey, Вы писали:

M>Я конечно не большой знаток в С++, но тут меня зацепило...

M>Один человек утверждает что создав статическую переменную в методе класса — она будет видна только в этом методе этого класса — прав ли он или нет?

M>т.е. Создав статическую переменную var в методе Method, мы будем иметь к ней доступ только в этом методе и ни в каком другом — например OtherMethod?


Этот человек, безусловно, прав: за пределами тела этой функции обращение к этой переменной по ее идентификатору невозможно. Но(!) мы можем из этой функции вернуть ссылку на эту переменную, и через эту ссылку получать и изменять ее значение:
class Sample
{
public:
  static int& Var()
  {
    static int var;
    return var;
  }
  void OtherMethod()
  {
    Var()--;
  }
};
... << RSDN@Home 1.2.0 alpha rev. 787>>
--
Справедливость выше закона. А человечность выше справедливости.
Re: Статическая переменная в методе...
От: igna Россия  
Дата: 11.04.08 06:04
Оценка:
Здравствуйте, Mckey, Вы писали:

M>Я конечно не большой знаток в С++, но тут меня зацепило...

M>Один человек утверждает что создав статическую переменную в методе класса — она будет видна только в этом методе этого класса — прав ли он или нет?

Он прав. А в каком языке это не так, как в C++? То есть, чтобы статическая или еще какая объявленная в блоке переменная была видна в смежном блоке.
Re[2]: Статическая переменная в методе...
От: Mckey Россия  
Дата: 11.04.08 06:15
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, Mckey, Вы писали:


M>>Я конечно не большой знаток в С++, но тут меня зацепило...

M>>Один человек утверждает что создав статическую переменную в методе класса — она будет видна только в этом методе этого класса — прав ли он или нет?

I>Он прав. А в каком языке это не так, как в C++? То есть, чтобы статическая или еще какая объявленная в блоке переменная была видна в смежном блоке.


Ну например в C# объявить статическую переменную в методе вообще нельзя..
Делай добро и бросай его в воду...
Re[3]: Статическая переменная в методе...
От: igna Россия  
Дата: 11.04.08 06:23
Оценка:
Здравствуйте, Mckey, Вы писали:

M>Ну например в C# объявить статическую переменную в методе вообще нельзя..


Так ведь речь не о том. Просто интересно, как в голову могла придти такая идея, что переменная будет видна в смежном блоке.
Re: Статическая переменная в методе...
От: VoP Россия  
Дата: 11.04.08 07:52
Оценка:
Здравствуйте, Mckey, Вы писали:

M>Я конечно не большой знаток в С++, но тут меня зацепило...

M>Один человек утверждает что создав статическую переменную в методе класса — она будет видна только в этом методе этого класса — прав ли он или нет?

M>Пример (если есть какие либо ошибке в написании прошу простить — на с++ не пишу):


M>
M>class Sample
M>{
M>  void Method()
M>  {
M>    static int var = 0;
M>    var++;
M>  }
M>  void OtherMethod()
M>  {
M>    var--;
M>  }
M>}
M>


M>т.е. Создав статическую переменную var в методе Method, мы будем иметь к ней доступ только в этом методе и ни в каком другом — например OtherMethod?


Более того эта переменная будет хранить свое предыдущее значение. Т.е. на самом деле эта не локальная переменная, а глобальная, но с ограниченной областью видимостью.
Re[3]: Статическая переменная в методе...
От: MasterZiv СССР  
Дата: 11.04.08 08:18
Оценка: :)
Mckey пишет:
> Ну например в C# объявить статическую переменную в методе вообще нельзя..

Да ну, брось. Как же они там живут-то на этом C# ?
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Статическая переменная в методе...
От: Аноним  
Дата: 11.04.08 08:49
Оценка: 2 (1)
Здравствуйте, igna, Вы писали:

I>А в каком языке это не так, как в C++? То есть, чтобы статическая или еще какая объявленная в блоке переменная была видна в смежном блоке.


javascript.

<html>
<body>
<script language='javascript'>
function x() 
{
  for(var i = 0; i != 5; ++i)
  {
    var y = 1;
  }
  if (y != 0)
  {
    ++y;
  }
  alert(y); // тут будет 2.
}
</script>
<input type=button onclick='x()' value='hi'/>
</body>
</html>
Re[3]: Статическая переменная в методе...
От: Аноним  
Дата: 11.04.08 09:50
Оценка: +1
A>Время жизни — такое же, как и у остальных статических переменных.
не совсем время жизни — от первого вызова функции и до-после atexit)
Re[2]: Статическая переменная в методе...
От: Erop Россия  
Дата: 12.04.08 11:39
Оценка:
Здравствуйте, igna, Вы писали:

I>Он прав. А в каком языке это не так, как в C++? То есть, чтобы статическая или еще какая объявленная в блоке переменная была видна в смежном блоке.


BASIC или FOCAL подойдут?
Например, в любом, где вопрос о наличии тех или иных переменных, или полей объекта, решается динамически.

Опретор объяаления переменной может просто добавлять запись о переменной к глобальной таблице переменных, или к таблице аттрибутов объекта...
Смолтолк, так же можешь поботать, например...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Статическая переменная в методе...
От: Roman Odaisky Украина  
Дата: 12.04.08 17:02
Оценка: +1
Здравствуйте, igna, Вы писали:

I>Он прав. А в каком языке это не так, как в C++? То есть, чтобы статическая или еще какая объявленная в блоке переменная была видна в смежном блоке.


Forth :-)

some-condition if 42 , create x then x @ .
До последнего не верил в пирамиду Лебедева.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.