Что такое вообще типы данных в с++? что не является типом данных - Вопросы по С+
  • Чаты 4chT.com в телеграмм
    Наши группы в телеграмм

Вопрос Что такое вообще типы данных в с++? что не является типом данных

Регистрация
6 Май 2013
Сообщения
63
Репутация
0
Спасибо
0
Монет
0
Помогите мне, пожалуйста, а то я уже все статьи перечитал и все равно не понимаю



Знаю, что есть основные типы данных и есть составные



Но я не понимаю то, как например сама функция может являться типом данных?



Ведь перед объявлением функции мы указываем какого типа данных она будет



int Foo()

{}



Получается может быть так, что мы указываем тип данных другому типу данных ??

(Я не про то, когда меняется тип данных один на другой)
 
Регистрация
16 Ноя 2013
Сообщения
90
Репутация
0
Спасибо
0
Монет
0
В си два плюса существует несколько основных типов данных
Здесь чётко и понятно описано что есть что и для чего: metanit.com/cpp/tutorial/2.3.php
 
Регистрация
22 Ноя 2013
Сообщения
88
Репутация
0
Спасибо
0
Монет
0
Пожалуйста имейте ввиду, что этот пользователь забанен
Не знаю как там на с++, но типы данных это:
Строка: 'Набор абсолютно любых символов113^€÷^hey'
Число: '123'
Число с плавающей запятой: '1.0', '2.5'
 
Регистрация
13 Мар 2013
Сообщения
88
Репутация
0
Спасибо
0
Монет
0
Значением имени Foo является указатель - адрес в памяти, по которому находится функция. Когда мы пишем Foo();, то запускаем выполнение кода, расположенного по этому адресу. Но просто Foo - без круглых скобок - это только адрес в памяти. И тип "функция" относится не к коду функции, а к адресу функции в памяти. Присваиваем и передаём как параметр не код функции, а адрес функции.

И в этом отношении указатель на функцию ничем не отличается от указателя на int. А тип - это всего лишь информация о смысле того, что содержится по указанному адресу. Если это целое - мы можем прибавить или отнять, умножить или разделить. А если функция - можем выполнить.
 
Регистрация
16 Ноя 2012
Сообщения
80
Репутация
0
Спасибо
1
Монет
0
По идее, когда ты пишешь int FucnName(), то эта функция должна возвращать число (например, return 1), а если создашь string FuncName(), то она будет возвращать строку. Для меня бесполезное действие, но всяко этому найдется применение.
Например int main()
{
int result = ChoTo();
cout
 
Регистрация
6 Сен 2013
Сообщения
102
Репутация
-9
Спасибо
0
Монет
0
Поясню Андрея.
Если функции имеют разные имена, но принимают одинаковые типы и возвращают тоже, то говорят, что функции однотипны.
 
Регистрация
18 Ноя 2013
Сообщения
99
Репутация
0
Спасибо
0
Монет
0
Ну вот, например, тип функции не является типом данных. А операции языка - не типы вообще и типов не имеют. Переменная - имеет тип, но типом не является. И т.п.
Тип данных - это название описания, как следует интерпретировать последовательность кодирующих какую-то информацию битов и какие операции и преобразования к этой последовательности можно применять.
 
Регистрация
18 Дек 2013
Сообщения
78
Репутация
0
Спасибо
0
Монет
0
> не понимаю то, как например сама функция может являться типом данных?
Ответ на этот вопрос зависит от вашего образования. Если еще не закончили школу, то можете пока не заморачиваться. В высшей математике вводится понятие функционального пространства, элементами которого являются уже не числа, а функции и с этими функциями оперируют по правилам, подобным тем, которые используют, скажем, для операций с действительными числами.

В программировании аналогичным образом приходится использовать функторы (это объекты, классы которых реализуют operator(), позволяющий использовать такой объект-функтор как функцию) и обычные сишные функции, которые используют как переменную. Примером может быть например функтор std::negate, который если его вызвать с произвольным типом, поддерживающим операцию унарного минуса, вернет результат, имеющий этот же самый тип и со значением аргумента, к которому была применена эта операция унарного минуса.

Т.е. до момента, когда функция будет вызвана уже с какими-то аргументами, с ней (и другими функциями) возможно манипулировать абстрактно, без учета аргументов и прочего, создавая, например, некоторые комбинации и последовательности применения. Смысл этих действий, конечно, заключается в том, что рано или поздно все это будет вызвано уже с конкретными значениями.

> Ведь перед объявлением функции мы указываем какого типа данных она будет
int Foo() {}
Перед объявлением функции указывают тип возвращаемого значения. Когда говорится, что функция Foo имеет тип int, это означает, что она возвращает результат такого типа, а не то, что символ Foo - целое число. Если же в программе встретится Foo, то он будет иметь тип "указателя на функцию возвращающую целое число и не принимающую аргументов", вот именно в этом значении у функции имеется тип. Который, еще раз подчеркиваю, отличается от типа возвращаемого значения

>Получается может быть так, что мы указываем тип данных другому типу данных ??
Нет. Про возвращаемое значение см. выше, а тип этой самой объявленной функции (указателя на нее, он же символ Foo) на языке Си будет выглядеть как: int (*)() // Вот эту запись можно условно считать типом Foo

int (*t1)(); // А t1 и t2 - это уже переменные, имеющие тип,
int (*t2)(); // соответствующий функции Foo
auto t3 = Foo; // И t3, кстати, тоже
 
Сверху Снизу