Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
2 / 5 / 1
Регистрация: 13.09.2015
Сообщений: 100
1

Зачем в определении функции заново задаются переменные

13.09.2015, 15:34. Просмотров 378. Ответов 6
Метки нет (Все метки)

Есть программа для перевода из Цельсия в фарингейты
На грамматические ошибки не обращайте внимание, суть в том, что зачем во второй части программы указывать float TempCel;
Если я уже определил это в первой части программы?
И ещё вопрос, зачем вообще нужна вся эта возня с прототипом функции, если я просто могу все вычисления сделать в теле int main()?
Извините, если глупый вопрос, я только начал изучать c++

}
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
31
32
#include <iostream>
#include <conio.h>
 
using std::endl;
using std::cout;
using std::cin;
 
float Convert (float);
 
int main ()
{
 
    float TempCel;
    float TempFar;
 
    cout << "Enter a temp in Far: " << endl;
    cin >> TempFar;
        TempCel = Convert (TempFar);
    cout << "A temp in Cel: " << endl << TempCel << endl;
 
    _getch ();
    return 0;
    
}
 
float Convert (float TempFar)
{
    float TempCel;  
    TempCel = (TempFar - 32)*5/9;
return TempCel;
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.09.2015, 15:34
Ответы с готовыми решениями:

Зачем в определении std::forward () нужен объект remove_reference?
Зачем в определении std::forward() нужен объект remove_reference ? И почему не могут быть выведены...

MS DOS. Не задаются переменные окружения
Вопрос адресован знатокам MS DOS (6.22). Пытаюсь задать переменную: set aaa=c:\nu_6\aaa пытаюсь...

Нужно сделать меню программы, где задаются 2 переменные
Нужна программа, у нее похожее меню (как в прикрепленном файле), две переменные задаются...

Зачем объявлять переменные?
В самом деле. Зачем объявлять переменные, если требуется просто написать решение, сдать...

6
Эксперт CЭксперт С++
5047 / 2230 / 330
Регистрация: 20.02.2013
Сообщений: 5,600
Записей в блоге: 24
13.09.2015, 15:46 2
ChadloveMary, потому что в функции main() одни переменные (с областью видимости с 11 по 24 строки кода), а в функции Convert() другие переменные (с областью видимости с 27 по 32 строки кода).

Добавлено через 38 секунд
Это разные переменные. Хотя и называются они одинаково.

Добавлено через 3 минуты
Проще говоря, переменные объявленные в функции (классе, структуре, просто блоке кода) ей и принадлежат, т.е. имеют область видимости функции. Они существуют до тех пор, пока существует функция.

Добавлено через 4 минуты
В качестве примера можно привести населённые пункты. Например, на Урале есть посёлки Париж, Берлин, Лейпциг, Варна. Но они не те же, что Париж во Франции или Берлин и Лейпциг в Германии. Говоря языком плюсов, уральские Париж, Берлин, Лейпциг и Варна имеют область видимости "Урал", а оригинальные - область видимости, скажем, "Западная Европа".
1
Don't worry, be happy
16958 / 9839 / 1895
Регистрация: 27.09.2012
Сообщений: 24,392
Записей в блоге: 2
13.09.2015, 15:48 3
http://habrahabr.ru/company/sm... og/234239/
0
Эксперт CЭксперт С++
5047 / 2230 / 330
Регистрация: 20.02.2013
Сообщений: 5,600
Записей в блоге: 24
13.09.2015, 15:51 4
P.S. Извиняюсь насчёт Варны. У неё область видимости "Восточная Европа".
0
2 / 5 / 1
Регистрация: 13.09.2015
Сообщений: 100
13.09.2015, 15:55  [ТС] 5
gru74ik, Тогда получается что TempFar не существует в float Converter, потому что это уже другая функция? Мне нужно ещё раз объявить во второй части программы float TempFar;?
0
Эксперт CЭксперт С++
5047 / 2230 / 330
Регистрация: 20.02.2013
Сообщений: 5,600
Записей в блоге: 24
13.09.2015, 16:11 6
ChadloveMary, давай по порядку.
В 13 и 14 строке кода ты создаёшь переменные float TempCel и float TempFar с областью видимости функции main().
В 18 строке кода ты присваиваешь мэйновой переменной TempCel значение, которое вернёт функция Convert(), а в качестве аргумента ты передаёшь в функцию Convert() опять же мэйновую переменную TempCel:
C++
1
TempCel = Convert (TempFar);
А внутри функции Convert() свои переменные, они скрывают (как бы заслоняют собой) переменные из мэйна. Как только ты вошёл в тело функции Convert(), в дело вступают переменные с областью видимости функции Convert(). И пока Convert() не вернёт значение в вызвавшую её функцию (в нашем примере это main()), переменные с областью видимости функции main() будут "скрыты", то есть внутри тела функции Convert() мэйновые переменные float TempCel и float TempFar не видны.

Добавлено через 3 минуты
Тебе Было бы проще понять, если бы ты в разных функциях дал переменным разные имена:
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
31
32
#include <iostream>
#include <conio.h>
 
using std::endl;
using std::cout;
using std::cin;
 
float Convert (float  temp_far);
 
int main ()
{
 
    float TempCel;
    float TempFar;
 
    cout << "Enter a temp in Far: " << endl;
    cin >> TempFar;
        TempCel = Convert (TempFar);
    cout << "A temp in Cel: " << endl << TempCel << endl;
 
    _getch ();
    return 0;
    
}
 
float Convert (float temp_far)
{
    float temp_cel;  
    temp_cel = (temp_far - 32)*5/9;
 
    return temp_cel;
}
0
Модератор
Эксперт С++
10255 / 8573 / 5198
Регистрация: 18.12.2011
Сообщений: 22,943
13.09.2015, 17:57 7
Вообще-то промежуточную переменную здесь можно вообще не использовать
C++
1
2
3
4
double Convert (double temp_far)
{
    return (temp_far - 32.0)*5.0/9.0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.09.2015, 17:57

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Зачем переменные инициализируются нулем?
#include &lt;math.h&gt; #include &lt;iostream&gt; using namespace std; int gcf(int a,int b); int main () {...

Зачем всегда инкапсулировать переменные в свойства
Давно хотел спросить. Вопрос возникает постоянно, когда я вижу код типа такого: class cls {...

Зачем оставлять переменные-члены класса закрытыми?
Вот пишут,что нужно переменные - члены класса оставлять закрытыми, используя для их установки...

Зачем при выводе оборачивать переменные в кавычки?
$arr = array('num1' =&gt; '1', 'num2' =&gt;'2'); foreach($arr as $key =&gt; $val){ echo &quot;$key =&gt;...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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