#include <iostream>
using std::cout, std::endl;

/*
    Это программа на языке C++ и компилировать её надо так:
        g++ 01cppfunctions.c


    В отличии от языка C в языке C++ есть возможность создать 2 и больше разных функции с одним и тем же названием,
    но с разным количеством и/или типами аргументов.

    Компилятор сам догадается, какую функцию следует вызвать в зависимости от типа аргумента.

*/

int abs(int a)
{
    if (a < 0)
        return -a;
    else 
        return a;
}

double abs(double a)
{
    if (a < 0)
        return -a;
    else 
        return a;
}




int main()
{
    cout << abs(-5)   << endl;
    cout << abs(-5.9) << endl;


    double x = abs(-5.9);
    cout << x << endl;
}




/*
    Задачи:

    1)  Протестируйте, что компилятор действительно вызывает нужные функции
        Для этого просто сделайте так, чтобы функция, которая принимает int печатала на экран слово int,
        а функция, которая принимает double, печатала бы на экран слово double


    2)  Что если на вход функции abs передать тип float?
        Например, вот так: 
            abs(1.5f)

        Какая из функций вызовется?


    3)  Напишите ещё одну перегрузку функции abs для типа float
        Протестируйте её в функции main

*/