MATLAB: How does a ‘network’ object act as a function when performing forward propagation

Deep Learning Toolboxneural networkobject argument

I'm using the Neural Network Toolbox. Let us create a dummy network, called net:
input = 1:10;
net = feedforwardnet(5);
net = trainlm(net, input, 2*input);
This network is an object of class network, as evidenced by the class command:
class(net)
ans =
network
What is happening, then, when I perform forward propagation using the following command?
output = net(input);
How am I passing an argument into an object, and not a function? What is happening here? Is this some clever trick, or am I missing something really obvious? How do I replicate this in a custom-made class?
Thank you.

Best Answer

Indexing into an object A invokes particular methods on that object if they exist.
y = A(indices) % subsref
A(indices) = z % subsasgn
Most commonly, subsref extracts elements from an array. But as a class author you could theoretically do whatever you wanted in your overload of subsref for your class. The Neural Network Toolbox developers have overloaded subsref for their class to simulate the network using the "indices" as input data.
As a simpler example that does something similar, look at the DocPolynom example in the object-oriented programming documentation, particularly the implementation of its subsref method. The case in that code for '()' uses polyval to evaluate the polynomial using the coefficients stored in the object.