
- •Объявление функции
- •Статические переменные
- •Вызов функций с указателями в качестве параметра
- •Cсылка на структуру
- •Передача параметров по ссылке
- •Пример. Сумма элементов массива
- •Массив указателей на функцию (jump table)
- •Аргументы функции, передаваемые по умолчанию
- •Myfunc(15.1, 'a'); // передача явно заданных значений
Массив указателей на функцию (jump table)
void
f1( );
void f2( ); //прототипы функций
void f3( );
void f1( )
{
cout<<"1"<<endl;
}
void f2( )
{
cout<<"2"<<endl;
}
void f3( )
{
cout<<"3"<<endl;
}
void (*jt[])( )={f1,f2,f3};// массив указателей на функции с
// инициализацией
int main( )
{
for (int i=0;i<3;i++) jt[i]( ); // вызов функций в цикле через элемент
//массива
//for (int i=0;i<3;i++) (*jt)[i]( );// или так
getch();
return 0;
}
В общем виде массив указателей на функции :
тип (*ptrf[])(список параметров, идентичный списку параметров
функций)
Перегрузка функций в С++
|
void f(int i); // передается один целочисленный параметр
void f(int i, int j); // передаются два целочисленных параметра
void f(double v); // передается один действительный параметр
int main()
{
f(10); // вызов первой функции
f(10, 20); // вызов второй функции
f(12.23); // вызов третьей функции
return 0;
}
void f(int i)
{
cout << "I=" << i << '\n';
}
void f(int i, int j)
{
cout << "I=" << i;
cout << ", J=" << j << '\n';
}
void f(double v)
{
cout << "V=" << v<< '\n';
}
Каждая версия перегруженной функции может выполнять любые действия. Однако, лучше определять перегруженные функции с одинаковым набором действий, но с различными типами параметров |
Аргументы функции, передаваемые по умолчанию
|
void myfunc(float num = 0.0, char ch = 'X')
{
. . .
}
…
Myfunc(15.1, 'a'); // передача явно заданных значений
myfunc(10.1); // передача одного явно заданного параметра (num), //второй- передается по умолчанию
myfunc(); // оба параметра передаются по умолчанию
Шаблоны функций
|
Общий формат
template <class T> тип имя_функции(список параметров)
{
//тело функции
}
Пример
template <class T> // или template <typename T>
T min(T x1, T x2, T x3)
{
T lmin=x1;
if (x2<lmin) lmin=x2;
if (x3<lmin) lmin=x3;
return lmin;
}
int main(int argc, char* argv[])
{
int i1=1,i2=3,i3=2;
double r1=2.5,r2=1.7,r3=3.4;
cout<<min(i1,i2,i3)<<endl;
cout<<min(r1,r2,r3)<<endl;
getch();
return 0;
}
Возврат ссылок
Функция может возвращать ссылку |
double val=100.0;
double &f()
{
return val; // возвращение ссылки на val
}
int main()
{
double newval;
cout<<f( )<<endl; // отображение значения val=100
newval=f( ); // присвоение значения val=100;
cout<<newval<<endl;
f( )=50.5; //изменение val=50.5
cout<<f()<<endl; // отображение значения val=50.5
}
Быстрый вызов функций
В среде С++Builder используется быстрый вызов функций и для этого используется атрибут __fastcall
тип возвращаемого значения __fastcall имя_функции (список аргументов)
Компилятор строит код, в котором значения аргументов размещаются не в стеке, а на регистрах процессора, если последние свободны. Это ускоряет выполнение программы