Sobrecarga de funciones VS invalidación en C++
- Utilice la sobrecarga de funciones para definir varias funciones con diferentes listas de parámetros en C++
- Use la anulación de funciones para redefinir los miembros heredados en la clase derivada en C++
Este artículo presentará las diferencias entre la sobrecarga de funciones y la anulación de VS en C++.
Utilice la sobrecarga de funciones para definir varias funciones con diferentes listas de parámetros en C++
La sobrecarga de funciones es la característica del lenguaje C++ para poder tener múltiples funciones con el mismo nombre, las cuales tienen diferentes parámetros y están ubicadas en un alcance. Generalmente, las funciones sobrecargadas realizan operaciones muy similares, y es intuitivo definir un nombre de función único para ellas y exponer la interfaz con múltiples conjuntos de parámetros. En este caso, definimos una clase llamada Planet
con tres funciones llamadas printNumAcu
. Todas estas funciones tienen diferentes parámetros, y se diferencian en el momento de la compilación. Tenga en cuenta que las funciones sobrecargadas deben tener diferentes tipos de parámetros o un número diferente de parámetros.
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
using std::string;
class Planet {
private:
int num{};
public:
explicit Planet(int i) : num(i) {}
void printNumAcu() const { cout << num * num << endl; }
void printNumAcu(int x) const { cout << num * num * x << endl; }
void printNumAcu(int x, int y) const { cout << num * num * x * y << endl; }
};
int main() {
Planet m1(3);
m1.printNumAcu();
m1.printNumAcu(3);
m1.printNumAcu(3, 3);
return EXIT_SUCCESS;
}
Producción :
9
27
81
Use la anulación de funciones para redefinir los miembros heredados en la clase derivada en C++
La anulación de función es la característica asociada con las clases derivadas y su herencia. Por lo general, las clases derivadas heredan todos los miembros de la clase base y algunas se redefinen en la clase derivada para implementar una rutina personalizada. Sin embargo, tenga en cuenta que la clase base debe especificar las funciones miembro que se supone deben anularse. Estas funciones miembro se conocen como funciones virtuales e incluyen la palabra clave virtual
en una definición también. También existe el concepto de función virtual pura, que es un tipo de función virtual que no necesita ser definida. Las clases que incluyen o heredan (sin anular) una función virtual pura se denominan clases base abstractas, que normalmente no deben usarse para crear objetos, sino derivar otras clases.
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
using std::string;
class Planet {
protected:
int num{};
public:
explicit Planet(int i) : num(i) {}
virtual void printName() = 0;
};
class Mars : public Planet {
public:
explicit Mars(int i) : Planet(i) {}
void printName() override { cout << "Name's Mars " << num << endl; }
};
class Earth : public Mars {
public:
explicit Earth(int i) : Mars(i) {}
void printName() override { cout << "Name's Earth " << num << endl; }
};
int main() {
Earth e1(3);
e1.printName();
Mars m1 = e1;
m1.printName();
return EXIT_SUCCESS;
}
Producción :
Name's Earth 3
Name's Mars 3
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