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

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

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

Изучаю с++ C++
Бывает ли у вас такое C++
Изучаю С++ C++
изучаю классы C++
C++ В общем изучаю маленько как кодить в ТС, и вот такая шляпа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
30.11.2012, 11:25  [ТС]     Изучаю C++ иногда бывает непонятно #101
Ок, понятно))
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
30.11.2012, 11:41     Изучаю C++ иногда бывает непонятно #102
На сколько я помню, дефалтоинт существует совсем в другом месте:
C++
1
static a;
означает
C++
1
static signed int a;
. Есть ещё auto, но оно вообще лишено смысла:
C++
1
auto a;
означает
C++
1
auto signed int a;
, но
C++
1
auto signed int a;
эквивалентно просто
C++
1
signed int a;
и вообще
C++
1
int a;
. Ещё
C++
1
signed a;
значит
C++
1
signed int a;
,
C++
1
unsigned a;
значит
C++
1
unsigned int a;
,
C++
1
small a;
означает
C++
1
signed small int a;
,
C++
1
long a;
означает
C++
1
signed long int a;
,
C++
1
signed f();
значит
C++
1
signed int f();
,
C++
1
unsigned f();
значит
C++
1
unsigned int f();
,
C++
1
small f();
означает
C++
1
signed small int f();
,
C++
1
long f();
означает
C++
1
signed long int f();
. То есть не в том случае, когда тип совсем опущен, он int, а если в длинно-составном типе опущены int и signed/unsigned, то по дефолту этот тип signed и int. И если вместе с директивами auto/static опущен тип, то он signed int. Вот только сохранено ли это в плюсах. И в источнике я не уверен. А полностью опустить тип функции на сях и плюсах просто не получится, это не бейсик. И дефолтоинту просто нет места.
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
30.11.2012, 11:49     Изучаю C++ иногда бывает непонятно #103
Цитата Сообщение от koderman Посмотреть сообщение
foo1(int a, int b = 1.432, int c = 0.25);
Так написать, конечно, можно. Только параметры целочисленного типа, а ты задаешь им значения с плавающей точкой. Поэтому дробная часть "обрубится".

C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
void foo(int a, int b = 1.432, int c = 0.25)
{
    std::cout << a << " " << b << " " << c << "\n";
}
 
int main()
{
    foo(1);
}
Посмотри сам, что напечатает такой пример: 1 1 0.

a - мы передали как аргумент при вызове функции, b и c - были использованы значения по умолчанию.

Если хочешь работать с вещественными числами, используй соответствующие типы:

C++
1
void foo(int a, double b = 1.432, double c = 0.25)
Добавлено через 6 минут
Цитата Сообщение от taras atavin Посмотреть сообщение
small a;
Может short?

Цитата Сообщение от taras atavin Посмотреть сообщение
если вместе с директивами auto/static опущен тип, то он signed int. Вот только сохранено ли это в плюсах.
Именно это, видимо, не сохранено, т.к. не компилирует и требуется указать тип.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
30.11.2012, 11:51     Изучаю C++ иногда бывает непонятно #104
Цитата Сообщение от Schizorb Посмотреть сообщение
short?
И short тоже, но и именно small. Кроме стандартного short есть ещё мелкомягкий small, означающий "в два раза короче, чем short".
koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
30.11.2012, 12:48  [ТС]     Изучаю C++ иногда бывает непонятно #105
Использование функций с одинаковыми именами. Перегрузка функций.
Если поменять местами параметры будет ли функция перегружена? Тоесть это останется одной функцией или всё-таки это две функции?
int funk(int, double); int funk(double, int);
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
30.11.2012, 13:21     Изучаю C++ иногда бывает непонятно #106
Конечно, порядок параметров в списке важен. Поэтому это будут две разные функции.

Добавлено через 1 минуту
Правда можешь наткнуться на неоднозначность, скажем, если вызовешь функцию так:

C++
1
funk(4, 6);
Передаешь ей два целочисленных аргумента (они умеют неявно преобразовываться в double). Какая из перегруженных функций будет вызвана?
koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
30.11.2012, 13:55  [ТС]     Изучаю C++ иногда бывает непонятно #107
Может в таких случаях надо ставить тип перед цифрами? Или как выйти из этой ситуации?
C++
1
funk(int 4,double 6);
Добавлено через 12 минут
А, ну или так делать. Если double или float то всегда ставить точку и ноль если чисел после точки нету?

C++
1
funk(4, 6.0);
Есть ведь ещё char. А в char слышал можно вносить маленькие числа.

Добавлено через 9 минут
А, ну да. если при этом при всём ещё будет функция int funk(int, int); То действительно не разберётся какую вызвать функцию.

Тоесть есть три функции допустим:

int funk(int, int);int funk(int, double); int funk(double, int);

и вызов funk(4, 6);

Какую функцию выберет? и как избежать путаницы?
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
30.11.2012, 14:10     Изучаю C++ иногда бывает непонятно #108
Цитата Сообщение от koderman Посмотреть сообщение
funk(4, 6.0);
Так можно, неоднозначности избежишь. А если в качестве аргументов переменные, то типы можно явно преобразовать:
C++
1
funk(static_cast<double>(x), y);
Но лучше всего не плодить такие перегруженные функции, чтобы путаницы не было. Дальше будешь шаблоны функций изучать, увидишь что перегрузка не всегда и нужна.

Добавлено через 24 секунды
Цитата Сообщение от koderman Посмотреть сообщение
Какую функцию выберет?
Так ты скомпилировать попробуй.

Добавлено через 5 минут
Вот вызовы твоих функций:
C++
1
2
3
4
funk(1, 2);
funk(1.0, 2);
funk(1, 2.0);
funk(1.0, 2.0);
Для первых трех будет найдено точное соответствие. А последняя - неоднозначность, т.к. функции для двух даблов у нас нет.

Добавлено через 2 минуты
Цитата Сообщение от koderman Посмотреть сообщение
Есть ведь ещё char. А в char слышал можно вносить маленькие числа.
Чар это по сути и есть целочисленный тип. Просто вывод для переменных этого типа перегружен таким образом, что печатает на экране символ, а не число.
koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
30.11.2012, 14:39  [ТС]     Изучаю C++ иногда бывает непонятно #109
Хе))) А как тогда совместить значения функций по умолчанию и перегрузку функций?)))
Допустим функции со значениями по умолчанию:

int AreaCube(int length, int width = 25, int height = 1);
int AreaCube(double length, int width = 25, int height = 1);
int AreaCube(float length, int width = 25, int height = 1);

и вызовы для неё без параметров))

AreaCube()
AreaCube()
AreaCube()

Добавлено через 9 минут
http://cpp.com.ru/lippman/c09.html
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
30.11.2012, 14:42     Изучаю C++ иногда бывает непонятно #110
Цитата Сообщение от koderman Посмотреть сообщение
А как тогда совместить значения функций по умолчанию и перегрузку функций?)))
Вам это так интересно? Делайте все по книжке, а вот когда выучите язык, будете задаваться более тонкими вопросами.
ForEveR
30.11.2012, 14:58
  #111

Не по теме:

Модераторы. Темка выходит за рамки правил форума, если что. Тут флуда будет страниц на N, предлагаю прикрыть-с.

koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
30.11.2012, 15:17  [ТС]     Изучаю C++ иногда бывает непонятно #112
Рамки правил форума запрещают изучать С++?)))
Флуда было бы меньше если бы кое кто здесь не добавил его)))
Schizorb
30.11.2012, 15:25
  #113

Не по теме:

Цитата Сообщение от koderman Посмотреть сообщение
Рамки правил форума запрещают изучать С++?)))
Как минимум есть правило - один вопрос одна тема...)

ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
30.11.2012, 15:25     Изучаю C++ иногда бывает непонятно #114
koderman, Пункт 4.4
Порядок создания тем.
На каждый вопрос создавайте по одной теме - это помогает избежать путаницы в ответах и облегчает поиск.
koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
30.11.2012, 15:30  [ТС]     Изучаю C++ иногда бывает непонятно #115
Ну это да, но представьте сколько тут тем прибавится)))
Темболее тут переходит всё от темы к теме, не в разброс
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2012, 16:33     Изучаю C++ иногда бывает непонятно
Еще ссылки по теме:

Изучаю классы, что-то не выходит C++
Openssl. Иногда вызов функций шифрования проходит нормально, иногда нет C++
Почему иногда отслеживается нажатие на три клавиши сразу, а иногда нет C++

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

Или воспользуйтесь поиском по форуму:
HighPredator
30.11.2012, 16:33     Изучаю C++ иногда бывает непонятно
  #116
 Комментарий модератора 
Закрыто
Yandex
Объявления
30.11.2012, 16:33     Изучаю C++ иногда бывает непонятно
Закрытая тема Создать тему
Опции темы

Текущее время: 00:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru