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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.95
koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
#1

Изучаю C++ иногда бывает непонятно - C++

27.11.2012, 15:03. Просмотров 5289. Ответов 115
Метки нет (Все метки)

Здравствуйте. Я изучаю С++ по книжкам, по видео и прочим заметкам в интернете. Уже где-то дней 7 учу. С++ первый язык который изучаю. Сейчас читаю
Название книги: Освой самостоятельно C++ за 24 часа, 4-е издание
Автор: Либерти, Джесс, Хорват, Дэвид
Кстати хорошая книга, советую начинающим.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2012, 15:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Изучаю C++ иногда бывает непонятно (C++):

Почему иногда отслеживается нажатие на три клавиши сразу, а иногда нет - C++
Доброй ночи, кто может объяснить почему иногда отслеживает нажатие на три кнопки сразу, а иногда нет. И как выйти с ситуации *( P.S. Пишу...

Openssl. Иногда вызов функций шифрования проходит нормально, иногда нет - C++
Всем привет! Использую библиотеку openssl для шифрования / дешифрования. Генерирую ключи следующим образом: RSA...

Почему иногда функции передается значение int, а иногда - нет? - C++
1 случай: void Function_1(int* & rVarOne, int* &rVarTwo) { /* Какие-то операции с указателями: rVarOne++; *rVarOne =...

Изучаю с++ - C++
Я начал учить с++ до этого выучил php,js. Но есть пару вопросов например создание папки с помощью windows команды *MD* вот как это...

изучаю классы - C++
Начал изучать класс. Вот использую коструктор, но не пойму где ошибка. файл.h #include "stdafx.h" #include <iostream> using...

Изучаю классы, что-то не выходит - C++
Здравствуйте! #include <iostream.h> class zerkalo { private: int Width, Length; public:

115
koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
27.11.2012, 19:15  [ТС] #16
Ну в этом примере return l*w; понятно что происходит. l умножается на w.
А что здесь происходит? Например если (x < y), то вернуть -1. Куда вернуть?


C++
1
2
3
4
5
6
7
8
9
int func1(int x, int y)
{
    if(x < y)
        return -1;
    if(x == y)
        return 0;
    if( x > y)
        return 1;
}
Может надо вместо этих цифр х и y поставить?
Тогда понятно что если (x < y) то х/y и присвоить результат функции func1.

C++
1
2
3
4
5
6
7
8
9
int func1(int x, int y)
{
    if(x < y)
        return х/y;
    if(x == y)
        return х%y;
    if( x > y)
        return y*х;
}
0
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.11.2012, 19:21 #17
Цитата Сообщение от koderman Посмотреть сообщение
Куда вернуть?
в место вызова функции
1
koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
27.11.2012, 19:25  [ТС] #18
Второй пример имеет смысл или ошибка?
0
v.a.l.i.d
413 / 378 / 10
Регистрация: 21.09.2012
Сообщений: 913
27.11.2012, 19:41 #19
Цитата Сообщение от koderman Посмотреть сообщение
Второй пример имеет смысл или ошибка?
C++
1
2
3
4
5
6
7
8
9
int func1(int x, int y)
{
    if(x < y)
        return х/y;
    if(x == y)
        return х%y;
    if( x > y)
        return y*х;
}
Конечно имеет. Здесь ничего страшного нет. Сначала вычисляется условие (x<y или x==y или x>y) и уже потом возвращается результат.
1
Kastaneda
Форумчанин
Эксперт С++
4655 / 2863 / 228
Регистрация: 12.12.2009
Сообщений: 7,275
Записей в блоге: 2
Завершенные тесты: 1
27.11.2012, 20:10 #20

Не по теме:

Цитата Сообщение от Jupiter Посмотреть сообщение
Kastaneda, а как же ABI? или чихали на него там(в MS) все? и в gcc так же?
Это не фишка MS. Просто я дал эту ссылку, потому что это первое, что нагуглилось. На самом деле в long mode (x86_64) не существует конвеций вызовов (типа _cdecl, _stdcall etc), а аргументы всегда передаются так, как я написал (там по ссылке более подробно). Т.е. можно сказать, что это особенность архитектуры, а не отдельно взятого компилятора.
Соответственно в gcc других компиляторах так же.



Добавлено через 6 минут

Не по теме:

пардон, в юниксах немного по другому

The calling convention of the System V AMD64 ABI is followed on Solaris, GNU/Linux, FreeBSD, and other non-Microsoft operating systems. The registers RDI, RSI, RDX, RCX, R8, and R9 are used for integer and memory address arguments while XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6 and XMM7 are used for floating point arguments. For system calls, R10 is used instead of RCX.[11] As in the Microsoft x64 calling convention, additional arguments are passed on the stack and the return value is stored in RAX.

2
koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
28.11.2012, 06:45  [ТС] #21
Апгрейды того что я ещё понял как работает функция:
Вычисления в теле функции могут быть любые, после чего возможен вариант того что результат вычислений будет присвоен какойто переменной например Х и с этой переменной результат отправляется в функцию через команду return. Например:

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
#include <iostream>
float Convert(float);
int main ()
{
float TempFer;
float TempCel;
std::cout<<"Please enter the temperature in Fahrenheit:";
std::cin>>TempFer;
TempCel=Convert(TempFer);
std::cout<<"\nHere`s temperature in Celsius:";
std::cout<<TempCel<<std::endl;
}
 
float Convert(float Fer)
{
 float Cel;
  Cel=((Fer-32)*5)/9
 
  return Cel;     //Отсюда результат вычислений строки 18 передаётся в функцию Convert 
                 //через переменную Cel.. 
                //Но на какую именно функцию? На ту что на строке 15 или сразу
               // на ту что на строке 10 откуда она
              // была вызвана?
}
0
Croessmah
Эксперт CЭксперт С++
13416 / 7570 / 855
Регистрация: 27.09.2012
Сообщений: 18,632
Записей в блоге: 3
Завершенные тесты: 1
28.11.2012, 06:54 #22
Откуда вызвана, туда и вернется.

Добавлено через 5 минут
Функции в C++
1
koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
28.11.2012, 08:02  [ТС] #23
В строке 3 указан тип возвращаемого значения для функции Convert это float(перед функцией Convert). Этот тип виден во всём коде потому что это глобальная переменная, поэтому в строке 10 не указан этот тип для Convert. Почему тогда тип возвращаемого значения для функции надо указывать в определении функции? В строке 15.
0
Croessmah
Эксперт CЭксперт С++
13416 / 7570 / 855
Регистрация: 27.09.2012
Сообщений: 18,632
Записей в блоге: 3
Завершенные тесты: 1
28.11.2012, 08:11 #24
Цитата Сообщение от koderman Посмотреть сообщение
В строке 3 указан тип возвращаемого значения для функции Convert это float(перед функцией Convert). Этот тип виден во всём коде потому что это глобальная переменная, поэтому в строке 10 не указан этот тип для Convert. Почему тогда тип возвращаемого значения для функции надо указывать в определении функции? В строке 15.

Не по теме:

Вы где-то учитесь или самообучение?



C++
1
float Convert(float);
Это не переменная. Это прототип функции (объявление функции). Эта строчка говорит компилятору, что такая функция существует, но её реализация находится где-то в другом месте кода.

В строке же 15 как раз начинается код самой функции.
Что касается строки 10:
C++
1
TempCel=Convert(TempFer);
Здесь переменной TempCel присваивается то значение, которое вернет функция.
1
koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
28.11.2012, 08:38  [ТС] #25
Самообучение. Функции вроде важная тема, хочется хорошо усвоить. ну почти всё уже понял по функциям. Я может догадываюсь как оно должно быть, но варианты как можно сделать неправильно я пишу сюда(уточнение, сомнение)))


ПЕРВОЕ УПОМИНАНИЕ функции Convert (в теле функции main) находится в строке 10, откуда функция и вызывается. Поэтому компилятор должен знать какое значение должна возвращать данная функция. Но в строке 10 перед функцией Convert не стоит тип возвращаемого значения. Тоесть мне так кажется что в строке 10 надо указать этот тип а в строке 15 можно не указывать. (Не знаю. Зависит от того глобальная ли переменная в строке 10 или локальная).
0
Croessmah
Эксперт CЭксперт С++
13416 / 7570 / 855
Регистрация: 27.09.2012
Сообщений: 18,632
Записей в блоге: 3
Завершенные тесты: 1
28.11.2012, 08:43 #26
Цитата Сообщение от koderman Посмотреть сообщение
Зависит от того глобальная ли переменная в строке 10 или локальная
Вообще никак не связанно.
Цитата Сообщение от koderman Посмотреть сообщение
Но в строке 10 перед функцией Convert не стоит тип возвращаемого значения.
Тип возвращаемого значения при вызове функции указывать не нужно.
0
koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
28.11.2012, 08:48  [ТС] #27
Аха, ок. Ну я по программам с функциями прошёлся, там нигде не указан тип в вызове функции. Видно функция принимает тип который ей дадут return´ом или всёже из прототипа берёт тип.)) (ведь функция без типа это автоматически int)
0
Croessmah
Эксперт CЭксперт С++
13416 / 7570 / 855
Регистрация: 27.09.2012
Сообщений: 18,632
Записей в блоге: 3
Завершенные тесты: 1
28.11.2012, 08:59 #28
Вот у Вас функция:
C++
1
2
3
4
5
6
float Convert(float Fer)
{
 float Cel;
  Cel=((Fer-32)*5)/9;//; здесь забыли ))) 
  return Cel;
}
Здесь указан и тип функции и тип параметров и имена параметров.
0
ValeryS
Модератор
6653 / 5062 / 470
Регистрация: 14.02.2011
Сообщений: 16,926
28.11.2012, 08:59 #29
Цитата Сообщение от koderman Посмотреть сообщение
Видно функция принимает тип который ей дадут return´ом или всёже из прототипа берёт тип.))
из прототипа
C++
1
2
3
4
int fnc1()
{
 return 1;
}
вернет int как указано
int fnc1()
а вот здесь int превратится double(приведение типов, в данном случае неявное)
C++
1
double n=fnc1();
функция возвращает int потом это значение конвертируется в double и присваивается переменной n
1
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
28.11.2012, 13:45 #30
(ведь функция без типа это автоматически int)
В C++ такого нет.

Ты видимо совсем не понимаешь, зачем нужен прототип и что он из себя представляет. Прототип уже содержит сигнатуру функции (возвращаемый тип и типы принимаемых аргументов), так зачем указывать ее тип при вызове?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2012, 13:45
Привет! Вот еще темы с ответами:

Бывает ли у вас такое - C++
Вообщем У меня происходят полтергейсты на компиляторе g++ Бывает так, чтобы прога упорно не работает правильно, чтобы я не...

Ооп. Изучаю основы, обьясните на примере - C++
Класс: форум - сайт для общения. Объект форум - собственно любой форум. Тут все понятно. Форумный движок тоже класс, соответственно...

В общем изучаю маленько как кодить в ТС, и вот такая шляпа - C++
#include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; int main() { float a,x,i,c,f,s; clrscr(); printf(&quot;...

Изучаю классы объектов, ошибок куча, работаю над квадратами, выручайте - C++
/* Л.Р. №2 Классы объектов. На вход подается некоторое количество квадратов (координаты вершин). Отсортировать и вывести их по...


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

Или воспользуйтесь поиском по форуму:
30
Yandex
Объявления
28.11.2012, 13:45
Закрытая тема Создать тему
Опции темы

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