49 - Métodos inline


Los métodos inline tienen por objetivo hacer partes de nuestro programas más eficientes en tiempo de ejecución.

Cuando definimos un método inline el código de la misma hace que se copie en el lugar donde se la llama a dicha función. Hay que tener en cuenta que cuando llamamos a un método hay una pérdida de tiempo en la llamada en si mismo.

Es conveniente utilizar métodos inline solo para algoritmos pequeñas ya que si bien hacen el código más eficiente por otro lado generan un código compilado más grande.

Problema:

Crear una clase llamada Temperatura que permita cargar la temperatura mínima, máxima y actual. Definir un método inline para retornar el rango de variación (diferencia entre la máxima y la mínima)

Programa:

#include<iostream>

using namespace std;

class Temperatura {
    int minima;
    int maxima;
    int actual;
public:
    Temperatura(int min, int max, int act);
    int rango()
    {
        int valor = maxima - minima;
        return valor;
    }
    void imprimir();
};

Temperatura::Temperatura(int min, int max, int act)
{
    minima = min;
    maxima = max;
    actual = act;
}

void Temperatura::imprimir()
{
    cout << "Minima:" << minima << "\n";
    cout << "Maxima:" << maxima << "\n";
    cout << "Actual:" << actual << "\n";
}


int main()
{
    Temperatura temperatura1(5,25,17);
    cout << "Rango de variacion de temperaturas:" << temperatura1.rango()<<"\n\n";
    temperatura1.imprimir();
    return 0;
}

Este proyecto lo puede descargar en un zip desde este enlace : Metodosinline1.zip

En C++ un método es inline solo con implementarlo en la declaración de la clase:

class Temperatura {
    int minima;
    int maxima;
    int actual;
public:
    Temperatura(int min, int max, int act);
    int rango()
    {
        int valor = maxima - minima;
        return valor;
    }
    void imprimir();
};

Si bien podemos agregar la palabra clave inline normalmente los programadores no lo hacen:

class Temperatura {
    int minima;
    int maxima;
    int actual;
public:
    Temperatura(int min, int max, int act);
    inline int rango()
    {
        int valor = maxima - minima;
        return valor;
    }
    void imprimir();
};

Tanto constructores como destructores pueden implementarse inline, en el problema anterior si implementamos el constructor inline el código queda como sigue:

#include<iostream>

using namespace std;

class Temperatura {
    int minima;
    int maxima;
    int actual;
public:
    Temperatura(int min, int max, int act)
    {
        minima = min;
        maxima = max;
        actual = act;
    }
    int rango()
    {
        int valor = maxima - minima;
        return valor;
    }
    void imprimir();
};

void Temperatura::imprimir()
{
    cout << "Minima:" << minima << "\n";
    cout << "Maxima:" << maxima << "\n";
    cout << "Actual:" << actual << "\n";
}


int main()
{
    Temperatura temperatura1(5,25,17);
    cout << "Rango de variacion de temperaturas:" << temperatura1.rango()<<"\n\n";
    temperatura1.imprimir();
    return 0;
}

Otra cosa que podemos notar en programas escritos en C++ es que cuando se declaran métodos inline se codifiquen en una sola línea, tener en cuenta que el resultado del algoritmo no cambia en absoluto, sino es solo una forma de organizar el código fuente de la declaración de la clase. En nuestro ejemplo tendríamos:

#include<iostream>

using namespace std;

class Temperatura {
    int minima;
    int maxima;
    int actual;
public:
    Temperatura(int min, int max, int act)    { minima = min; maxima = max; actual = act;    }
    int rango()    { int valor = maxima - minima; return valor; }
    void imprimir();
};

void Temperatura::imprimir()
{
    cout << "Minima:" << minima << "\n";
    cout << "Maxima:" << maxima << "\n";
    cout << "Actual:" << actual << "\n";
}


int main()
{
    Temperatura temperatura1(5,25,17);
    cout << "Rango de variacion de temperaturas:" << temperatura1.rango()<<"\n\n";
    temperatura1.imprimir();
    return 0;
}

Problema propuesto

  1. Plantear una clase que administre un vector de 5 enteros. Cargar los elementos por teclado, imprimirlos y retornar la suma de la primera y última componente (este último método implementarlo inline)
Solución
#include<iostream>

using namespace std;

class Vector {
    int vec[5];
public:
    void cargar();
    void imprimir();
    int sumaPrimeroUltimo() { return vec[0] + vec[4]; }
};

void Vector::cargar()
{
    for (int f = 0; f < 5; f++)
    {
        cout << "Ingrese elemento:";
        cin >> vec[f];
    }
}

void Vector::imprimir()
{
    for (int f = 0; f < 5; f++)
    {
        cout << vec[f] << "-";
    }
    cout << "\n";
}


int main()
{
    Vector vec1;
    vec1.cargar();
    vec1.imprimir();
    cout <<"Suma de la primer y última componente:"<<vec1.sumaPrimeroUltimo();
    return 0;
}

Este proyecto lo puede descargar en un zip desde este enlace :Metodosinline2.zip

Retornar