Перегрузка оператора вызова функции в C++

Опубликовано: 14 Сентября, 2022

В этой статье мы обсудим перегрузку операторов вызова функций в C++.

  • Оператор вызова функции обозначается «()» , который используется для вызова функции и передачи параметров. Он перегружен экземпляром класса, известным как объект-функция .
  • Когда оператор вызова функции перегружен, создается операторная функция, которую можно использовать для передачи параметров.
  • Он изменяет то, как оператор извлекается объектом.
  • В объектно-ориентированных языках оператор() может рассматриваться как обычный оператор, а объекты типа класса могут вызывать функцию (названную оператором() ), подобно вызову функции любого другого перегруженного оператора.
  • Когда оператор вызова функции перегружен, новый способ вызова функции не создается, а создается функция operator() , которой можно передать произвольное количество параметров.

Программа:

Ниже приведена программа ввода данных в матрицу с использованием дружественных функций: сначала перегружаются оператор вставки и оператор извлечения, а затем перегружается оператор() для получения ввода для i строки и j -го столбца матрицы и отображения значения в i строка и j столбец, хранящиеся в матрице:

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: ");
  
    // Compiler calls operator >> and
    // passes object cin and object m
    // as parameter operator>>(cin, m);
    cin >> m;
  
    printf("The matrix is: ");
    // Compiler calls operator << and
    // passes object cout and object m
    // as parameter operator<<(cin, m);
    cout << m;
  
    return 0;
}

Выход:

C++