Sobrecarga del operador de llamada a función en C++

En este artículo, discutiremos la sobrecarga de los operadores de llamadas a funciones en C++ .

  • El operador de llamada de función se denota con «()» , que se utiliza para llamar a la función y pasar parámetros. Está sobrecargado por la instancia de la clase conocida como objeto de función .
  • Cuando el operador de llamada de función está sobrecargado, se crea una función de operador que se puede usar para pasar parámetros.
  • Modifica la forma en que el objeto obtiene el operador.
  • En los lenguajes orientados a objetos , operator() puede tratarse como un operador normal, y los objetos de un tipo de clase pueden llamar a una función ( operador llamado() ) como si hiciera una llamada de función a cualquier otro operador sobrecargado.
  • Cuando el operador de llamada de función está sobrecargado, no se crea una nueva forma de llamar a una función, sino que se crea una función operator() a la que se puede pasar un número arbitrario de parámetros.

Programa:

A continuación se muestra el programa para tomar entradas en una array usando funciones amigas primero para sobrecargar el operador de inserción y el operador de extracción y luego sobrecargar al operador() para tomar entradas para la i -ésima fila y la j -ésima columna de la array y mostrar el valor en la i -ésima fila y la j -ésima columna almacenada en la array:

C++

// C++ program to illustrate the
// above concepts
#include <bits/stdc++.h>
#include <iostream>
using namespace std;
#define N 3
#define M 3
  
// Matrix Class
class Matrix {
private:
    int arr[N][M];
  
public:
    // Overloading of input stream
    friend istream& operator>>(
        istream&, Matrix&);
  
    // Overloading of output stream
    friend ostream& operator<<(
        ostream&, Matrix&);
    int& operator()(int, int);
};
  
// Function to overload the input
// ">>" operator
istream& operator>>(istream& cin,
                    Matrix& m)
{
    int x;
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            // Overloading operator()
            // to take input
            cin >> m(i, j);
        }
    }
    return cin;
}
  
// Function to overload the output
// "<<" operator
ostream& operator<<(ostream& cout,
                    Matrix& m)
{
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
  
            // Overloading operator() to
            // take input m.operator()(i, j);
            cout << m(i, j) << " ";
        }
        cout << endl;
    }
    return cout;
}
  
// Function to call the operator
// function to overload the operators
int& Matrix::operator()(int i, int j)
{
    return arr[i][j];
}
  
// Driver Code
int main()
{
    Matrix m;
  
    printf("Input the matrix:\n");
  
    // Compiler calls operator >> and
    // passes object cin and object m
    // as parameter operator>>(cin, m);
    cin >> m;
  
    printf("The matrix is:\n");
    // Compiler calls operator << and
    // passes object cout and object m
    // as parameter operator<<(cin, m);
    cout << m;
  
    return 0;
}

Producción:

Publicación traducida automáticamente

Artículo escrito por kingluffy17 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *