Sobrecarga de funciones en C++

Jinku Hu 12 octubre 2023
  1. Definir funciones sobrecargadas en C++
  2. Utilice funciones sobrecargadas con plantillas en C++
Sobrecarga de funciones en C++

Este artículo demostrará varios métodos para usar la sobrecarga de funciones en C++.

Definir funciones sobrecargadas en C++

La sobrecarga de funciones se conoce como parte del polimorfismo ad hoc que proporciona las funciones que se pueden aplicar a objetos de diferentes tipos. Es decir, estas funciones se definen con el mismo nombre en el ámbito dado y deben diferir en el número o tipos de argumentos. Tenga en cuenta que las funciones sobrecargadas son solo un conjunto de funciones diferentes que se resuelven en el momento de la compilación. Esta última característica los diferencia del polimorfismo en tiempo de ejecución, que se utiliza para funciones virtuales. El compilador observa el tipo de argumentos y elige qué función llamar.

Las funciones sobrecargadas deben diferir en el tipo de parámetro o en varios parámetros. De lo contrario, se producirá el error del compilador. Incluso cuando el tipo de retorno es diferente entre las funciones sobrecargadas o los tipos con alias se utilizan como argumentos, el compilador falla con un error. En el siguiente ejemplo, implementamos una estructura Math que tiene tres funciones estáticas para la suma de números. Cada una de las funciones toma diferentes tipos de pares de argumentos y devuelve el tipo correspondiente. Como resultado, el Math::sum se puede invocar con elementos vectoriales de un tipo diferente. Tenga en cuenta que la palabra clave struct define una clase en C++ y sus miembros son públicos por defecto.

#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::string;
using std::vector;

struct Math {
  static auto sum(int x, int y) { return x + y; }

  static auto sum(float x, float y) { return x + y; }

  static auto sum(double x, double y) { return x + y; }
};

int main() {
  vector<int> vec1 = {1, 2, 3, 4, 5};
  vector<float> vec2 = {1.0, 2.0, 3.0, 4.0, 5.0};

  for (const auto &item : vec1) {
    cout << Math::sum(item, item * 2) << "; ";
  }
  cout << endl;

  for (const auto &item : vec2) {
    cout << Math::sum(item, item * 2) << "; ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Producción :

3; 6; 9; 12; 15;
3; 6; 9; 12; 15;

Utilice funciones sobrecargadas con plantillas en C++

Las plantillas son una forma de programación genérica implementada en el lenguaje C++. Tiene características similares a la sobrecarga de funciones, ya que ambas se infieren en tiempo de compilación. Observe que el siguiente fragmento de código tiene la función printExponentVec que genera los elementos del vector genérico. Por lo tanto, se utiliza para realizar la misma operación para cada tipo, pero cuando queremos implementar diferentes cuerpos de funciones para diferentes tipos, se debe usar la sobrecarga de funciones.

#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::string;
using std::vector;

struct ExponentTwo {
  static auto Calc(int n) { return n * n; }
  static auto Calc(float n) { return n - n * n; }
  static auto Calc(double n) { return n + n * n; }
};

template <typename T>
void printExponentVec(const vector<T> &vec) {
  for (auto &i : vec) {
    cout << ExponentTwo::Calc(i) << "; ";
  }
  cout << endl;
}

int main() {
  vector<int> vec1 = {1, 2, 3, 4, 5};
  vector<float> vec2 = {1.0, 2.0, 3.0, 4.0, 5.0};

  printExponentVec(vec1);
  printExponentVec(vec2);

  return EXIT_SUCCESS;
}

Producción :

1; 4; 9; 16; 25;
0; -2; -6; -12; -20;
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artículo relacionado - C++ Function