Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
uranium_238
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 27
#1

Вопрос об области видимости переменной - C++

24.01.2014, 16:30. Просмотров 598. Ответов 7
Метки нет (Все метки)

У меня в проге один главный цикл и в этом цикле еще 4 цикла. Так вот, в начале главного цикла я написал int i =0; Вопрос, этот i = 0 будет для всей проге задан или когда прога перейдет в следущий цикл или if else она обнулится? Например я в первом if else или цикле задал int i = 0, во втором цикле или if else будет задано, что есть переменная i типа int со значением 0 или это значение действует только до следущего цикла или f else, с переходом на одно из них оно недействительно и нужно заного писать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
int main()
{
    setlocale(0, "Russian");
    int c, i = 0;  //вот тут задано что есть int i = 0!
    cout << "\t\t***Многофункциональный калькулятор***\n\n";
    do
    {
        cout << "\nВыбирите мод:\nОбычный:\t\t[1]\nКв. корень:\t\t[2]\nУр-ие вида ax^2+bx+c:\t[3]\nТригонометрические ф-ии:[4]\nВаш выбор: ";
        cin >> c;
        if (c == 1)
        {
            double a, b, rez;
            char z;
            int i = 0; //нужно ли тут вписывать это? или та первая надпись является значением и этого?
            cout << endl << "_________________________" << endl;
            cout << "Вы включили мод: обычный." << endl;
            cout << "-------------------------";
            do
            {
                cout << "\nВведите число_знак_число: ";
                cin >> a >> z >> b;
                switch (z)
                {
                case '+': rez = a + b; cout << "Результат: " << rez; break;
                case '-': rez = a - b; cout << "Результат: " << rez; break;
                case '*': rez = a*b; cout << "Результат: " << rez; break;
                case '/': rez = a / b; cout << "Результат: " << rez; break;
                default: cout << "Ошибка!";
                }
            } while (i < 1);
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2014, 16:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вопрос об области видимости переменной (C++):

Области видимости - C++
Если я запихиваю любые операции (в данном случае задание и заполнение массива); То далее не видит, не то что не заполненный массив, а...

Области видимости функций - C++
Добрый день. Написал класс, помогите найти ошибки #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;vector&gt; using namespace std;...

Изменение области видимости функции - C++
Здравствуйте, имеется вопрос по наследованию: Пусть имеется некоторый класс A c функцией func class A { ... Public: int...

Инициализация вне области видимости - C++
Здравствуйте! Работаю над деревом, в котором есть две структуры: struct file { public: string name; //имя string...

Классы, наследование, области видимости - C++
A.h: #ifndef A_H #define A_H #include &quot;C.h&quot; class C; class A { private:

Оператор разрешения области видимости - C++
Только начинаю изучать ООП. Объясните где и как применяется оператор разрешения области видимости.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
24.01.2014, 16:37 #2
переменная видна только в то области видимости в которой она объявлена, соответственно так
C++
1
2
3
4
5
6
7
8
if()
{
int i = 0;
}
else 
{
i = 50;
}
не будет работать потомучто ветка else это другая область видимости

или еще пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if()
{
int i = 0;
if()
{
int i = 10;
cout<<i;//тут будет вывод посл объявленной i потому что при повторном объявлении i обяъвленная выше будет скрыта последним объявлением
}
else
{
 
}
}
else
{
 
}
0
uranium_238
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 27
24.01.2014, 17:16  [ТС] #3
aLarman, как определить в какой области объявлена переиенная и когда она не будет действовать??
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
24.01.2014, 17:40 #4
Цитата Сообщение от aLarman Посмотреть сообщение
переменная видна только в то области видимости в которой она объявлена
ну зачем так неосторожно. Можно ведь получить доступ к глобальной переменной внутри функции, даже если в функции определена своя, локальная переменная, с таким же именем.
см. оператор разрешения области видимости
0
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
24.01.2014, 17:58 #5
Цитата Сообщение от uranium_238 Посмотреть сообщение
как определить в какой области объявлена переиенная и когда она не будет действовать?
Она должна быть объявлена до обращения к ней, пример 1 aLarman-а очень нагляден:
C++
1
2
3
4
5
6
7
8
if()
{
int i = 0;
}
else 
{
i = 50;
}
Если условие 1 не выполняется то переход сразу на 7 строчку, т.е. минуя 3 строчку где она объявляется
Вообще объявление в строчке 3, то он будет видна в коде между 3 и 4 строчками. Вот еще один пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main()
{
int i=0;
if (true)
{
    int i=4;//Это переопределение i
    cout<<i<<endl; //здесь выдаст 4 и эта фактически последняя строчка где она видна с новым определение
}
cout<<i<<endl;// а здесь выдаст 0 т.к. то определение здесь уже не видно, т.к. мог быть случай что if не сработал, т.е не было бы нового определения int i=4; 
system("Pause");
}
Добавлено через 1 минуту
Цитата Сообщение от Tulosba Посмотреть сообщение
ну зачем так неосторожно. Можно ведь получить доступ к глобальной переменной внутри функции, даже если в функции определена своя, локальная переменная, с таким же именем.
см. оператор разрешения области видимости
Ну высший пилотаж
это не для новичков это тогда ошибки в их кодах искать можно годами)

Добавлено через 11 минут
Решил привести такой пример до кучи:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <cstdlib>
#include <iostream>
int i=0;//глобальная переменная
using namespace std;
 
 
int main()
{
int i=0,k=1;
if (k==1)
{
    int i=4;//локальная переменная
    cout<<i<<endl;//Здесь 4 обращение к локальной
    cout<<::i<<endl; //Здесь 0 обращение к глобальной
}
cout<<i<<endl;////Здесь 0 обращение к глобальной
system("Pause");
}
1
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.01.2014, 20:02 #6
Цитата Сообщение от mustimur Посмотреть сообщение
16) cout<<i<<endl;////Здесь 0 обращение к глобальной
С чего бы это?
Вот так нипишите:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
i#include <cstdlib>
#include <iostream>
int i = 0;//глобальная переменная
using namespace std;
 
 
int main()
{
int i = 3,k = 1;
if (k==1)
{
    int i=4;//локальная переменная
    cout<<i<<endl;//Здесь 4 обращение к локальной
    cout<<::i<<endl; //Здесь 0 обращение к глобальной
}
cout<<i<<endl;////Здесь 3 обращение к локальной, объявленной в main() до if().
system("Pause");
}
1
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
24.01.2014, 20:05 #7
Цитата Сообщение от alsav22 Посмотреть сообщение
С чего бы это?
Точно, я копируя забыл удалить первый int в main, задумывалось так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <cstdlib>
#include <iostream>
int i=0;//глобальная переменная
using namespace std;
 
 
int main()
{
int k=1;
if (k==1)
{
    int i=4;//локальная переменная
    cout<<i<<endl;//Здесь 4 обращение к локальной
    cout<<::i<<endl; //Здесь 0 обращение к глобальной
}
cout<<i<<endl;////Здесь 0 обращение к глобальной
system("Pause");
}
Но вам спасибо, еще один пример создали по теме))
1
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,927
25.01.2014, 02:37 #8
до кучи
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
int i; // глобальная переменная i
 
void foo()
{
    std::cout << i << " ";
}
 
int main()
{
    foo(); // неинициализированные явно глобальные переменные равны 0
    int i = 2;
    foo();  // объявление локальной переменной i никак не влияет на глобальную переменную
    ::i = 1;
    foo();  // значение глоабльной переменной i поменялось (явно указали global scope)
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2014, 02:37
Привет! Вот еще темы с ответами:

Возможно ли спрятать класс из области видимости? - C++
Здравствуйте! У меня есть технический класс, который используется только в одном другом классе, и при этом вышеозначенный технический...

Подскажите пожалуйста, об области видимости объектов - C++
Привет, есть небольшой вопрос: не могу разобраться с ООП, помогите пожалуста. Например, есть несколько классов с открытыми полями. НЕ...

Расширение области видимости класса, за пределами цикла - C++
Здравствуйте, такой вопрос.... В общем пишу игру и а любая игра предполагает обновление экрана в цикле, дак вот.. Допустим я хочу создать...

Нет декларации «EOF» в этой области видимости - C++
Это не упражнение, а просто пример задачи, но видимо в нёс есть какая-то ошибка и я хочу узнать какая На всякий пожарный заголовочный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.01.2014, 02:37
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru