После настройки среды выполнения этот код вызывает функцию main( ) , и лишь тогда происходит выполнение операторов программы. При завершении программа выходит из функции main( ) , после чего вторая часть стандартного кода С++ освобождает занятые программой системные ресурсы и передаёт управление операционной системе.
_________________
87 стр. Глава 6. Создание функций
С++ позволяет программистам называть несколько разных функций одним и тем же именем. Эта возможность называется перегрузкой функций ( function overloading).
Вообще говоря, две функции в одной программе не могут иметь одинаковых имён , так как компилятор С++ просто не сможет их различить.
Однако используемое компилятором внутреннее имя функции включает число и типы аргументов ( но не возвращаемое значение ), и поэтому следующие функции являются разными:
void someFunction( void )
{
/* ...Выполнение некоторой функции */
}
void someFunction( int n )
{
/* ...Выполнение другой функции */
}
void someFunction( double d )
{
/* ...Выполнение ещё одной функции */
}
void someFunction( int n1 , int n2 )
{
/* ...Выполнение ещё одной функции, отличной от предыдущих */
}
Компилятор С++ знает, что функции someFunction( void ) , someFunction( int ) , someFunction( double ) , someFunction( int , int ) не одинаковы. В мире компьютеров встречается довольно много таких вещей, для которых можно найти аналогии в реальном мире. Существуют они и для перегрузки функций.
Вы знаете, что тип аргумента void указывать не обязательно. Например, SumFunction( void ) и SumFunction( ) вызывают одну и ту же функцию. Фактически функция может иметь сокращённое название, в нашем случае someFunction( ) , так же как и меня можно называть просто Стефаном. Если бы Стефанов больше нигде не было, меня всегда могли бы называть только по имени. Но в действительности нас побольше, и если кому-то посчастливится попасть в общество нескольких Стефанов, то к ним придётся обращаться по имени и фамилии ( кстати, напомню, что меня зовут Стефан Дэвис ). Пользуясь полным именем, никто не ошибётся, даже если Стефанов будет несколько. Поэтому, пока полные имена функций в программе уникальны, конфликты между ними невозможны.
Подобные аналогии между компьютерным и реальным миром не должны вас удивлять, так как компьютерный мир создан людьми.
Типичное приложение, использующее перегрузку функций, может выглядеть следующим образом:
int intVariable1 , intVariable2 ;
double doubleVariable ;
/* Функции различаются по типу передаваемых аргументов */
someFunction( ) ; /* Вызов someFunction( void ) */
someFunction( intVariable1 ) ; /* Вызов someFunction( int ) */
someFunction( doubleVariable ) ; /* Вызов someFunction( double ) */
someFunction( intVariable1 , intVariable2 ) ; /* Вызов someFunction( int , int ) */
/* С константами функции работают аналогично */
someFunction( 1 ) ; /* Вызов someFunction( int )*/
someFunction( 1.0 ) ; /* Вызов someFunction( double ) */
someFunction( 1 , 2 ) ; /* Вызов someFunction( int , int ) */
_________________
88 стр. Часть 2. Становимся функциональными программистами
В каждом случае типы аргументов соответствуют тем, которые значатся в полном имени каждой функции.

«Тип возвращаемого значения в полное имя функции ( называемое также еёсигнатурой ) не входит. Следующие две функции имеют одинаковые имена ( сигнатуры ) и поэтому не могут использоваться в одной программе:
int someFunction( int n ) ;
/* Полным именем этой функции является someFunction( int ) */
double someFunction( int n ) ; /* Имеет то же полное имя */
»
[ Атас! ]

«В выражениях с перегруженными функциями могут использоваться переменные разных типов, поскольку при определении полного имени играют роль только аргументы. Следующий код вполне допустим:
int someFunction( int n ) ;
double d = someFunction( 10 ) ;
/* Преобразуем тип полученного значения */
»
[ Помни! ]
В этом фрагменте возвращаемые функцией значения типа int преобразуются в double . Но следующий код некорректен:
int someFunction( int n ) ;
double someFunction( int n ) ;
double d = someFunction( 10 ) ;
/* В этом случае мы преобразуем тип полученного целочисленного значения или используем вторую функцию? */
Читать дальше