Я конечно не большой знаток в С++, но тут меня зацепило...
Один человек утверждает что создав статическую переменную в методе класса — она будет видна только в этом методе этого класса — прав ли он или нет?
Пример (если есть какие либо ошибке в написании прошу простить — на с++ не пишу):
class Sample
{
void Method()
{
static int var = 0;
var++;
}
void OtherMethod()
{
var--;
}
}
т.е. Создав статическую переменную var в методе Method, мы будем иметь к ней доступ только в этом методе и ни в каком другом — например OtherMethod?
Здравствуйте, Mckey, Вы писали:
M>Я конечно не большой знаток в С++, но тут меня зацепило... M>Один человек утверждает что создав статическую переменную в методе класса — она будет видна только в этом методе этого класса — прав ли он или нет?
даже хуже — это относится к любому имени, объявленному локально внутри функции
Здравствуйте, Mckey, Вы писали:
M>Я конечно не большой знаток в С++, но тут меня зацепило...
Конкретно этот вопрос не специфичен для С++, потому как также относится и к Си.
M>Один человек утверждает что создав статическую переменную в методе класса — она будет видна только в этом методе этого класса — прав ли он или нет?
Думаю, что прав.
M>т.е. Создав статическую переменную var в методе Method, мы будем иметь к ней доступ только в этом методе и ни в каком другом — например OtherMethod?
Здравствуйте, 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 здесь недоступна
Здравствуйте, 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>>
Прав.
Область видмости этой переменной — этот метод.
Время жизни — такое же, как и у остальных статических переменных.
Если кто-то объявил переменную подобным образом, значит за пределами метода никто не должен знать о существовании этой переменной.
Здравствуйте, 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>>
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, Mckey, Вы писали:
M>Я конечно не большой знаток в С++, но тут меня зацепило... M>Один человек утверждает что создав статическую переменную в методе класса — она будет видна только в этом методе этого класса — прав ли он или нет?
Он прав. А в каком языке это не так, как в C++? То есть, чтобы статическая или еще какая объявленная в блоке переменная была видна в смежном блоке.
Здравствуйте, igna, Вы писали:
I>Здравствуйте, Mckey, Вы писали:
M>>Я конечно не большой знаток в С++, но тут меня зацепило... M>>Один человек утверждает что создав статическую переменную в методе класса — она будет видна только в этом методе этого класса — прав ли он или нет?
I>Он прав. А в каком языке это не так, как в C++? То есть, чтобы статическая или еще какая объявленная в блоке переменная была видна в смежном блоке.
Ну например в C# объявить статическую переменную в методе вообще нельзя..
Здравствуйте, Mckey, Вы писали:
M>Я конечно не большой знаток в С++, но тут меня зацепило... M>Один человек утверждает что создав статическую переменную в методе класса — она будет видна только в этом методе этого класса — прав ли он или нет?
M>Пример (если есть какие либо ошибке в написании прошу простить — на с++ не пишу):
M>
M>т.е. Создав статическую переменную var в методе Method, мы будем иметь к ней доступ только в этом методе и ни в каком другом — например OtherMethod?
Более того эта переменная будет хранить свое предыдущее значение. Т.е. на самом деле эта не локальная переменная, а глобальная, но с ограниченной областью видимостью.
Здравствуйте, 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>
Здравствуйте, igna, Вы писали:
I>Он прав. А в каком языке это не так, как в C++? То есть, чтобы статическая или еще какая объявленная в блоке переменная была видна в смежном блоке.
BASIC или FOCAL подойдут?
Например, в любом, где вопрос о наличии тех или иных переменных, или полей объекта, решается динамически.
Опретор объяаления переменной может просто добавлять запись о переменной к глобальной таблице переменных, или к таблице аттрибутов объекта...
Смолтолк, так же можешь поботать, например...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, igna, Вы писали:
I>Он прав. А в каком языке это не так, как в C++? То есть, чтобы статическая или еще какая объявленная в блоке переменная была видна в смежном блоке.