#include <iostream>

struct s {
   int k;

   int f(int n) {             // función miembro normal para contrastar la notación
      return k + n;
   }

   int operator[](int n) {    // operator[] usa la notación de arreglo
      return k + n;
   }

   int operator()(int n) {    // operator() usa la notación de llamada a función (**éste es el que nos importa en este ejemplo**)
      return k + n;
   }
};

int main( ) {
   s v = { 100 };
   std::cout << v.f(7) << "\n";     // función miembro normal
   std::cout << v[7] << "\n";       // notación de arreglo
   std::cout << v(7) << "\n";       // notación de llamada a función (objeto función)
}
