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

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



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



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



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



int Foo()

{}



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

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

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

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

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

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

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

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