Es ist ein binärer Operator, einer mit zwei Parametern. (++ wäre ein sog. unärer Operator.)
Man beachte die friend-Deklaration. Der Operator selber ist damit keine Methode der Klasse, in der er deklariert (nicht definiert) ist, sondern lediglich ein friend dieser Klasse, sehr wahrscheinlich eine einzeln stehende Funktion. Diese Funktion hat keinen (!) this-Zeiger. Aus diesem Grunde müssen ihr beide Parameter explizit übergeben werden. - Binäre Operatoren, die als member einer Klasse definiert werden, also als Methode, wie z.B. meist + und -, haben nur einen (!) sichtbaren Parameter, nämlich den zweiten. Der erste ist implizit der this-Zeiger. Die Schiebeoperatoren dürfen aber meines Wissens nicht als Methode definiert werden, drum sind sie üblicherweise friend. (Vergl. auch [zur Verwirrung] unäre Operatoren: friends haben einen (!) angegebenen Parameter, Methoden haben keinen (!) angegebenen Parameter, d.h. nur den impliziten this-Zeiger.)
Die Übergabe der Parameter während des Aufrufs ist bei Operatoren speziell. Eigentlich geschieht ja ein Funktionsaufruf unter Nennung ihres Namens wie folgt:
function(parameter, parameter, ...);
hier also konkret:
operator >> (cin, a); // syntaktisch völlig korrekt
Im speziellen Fall eines binären Operators (und das ist ja der Sinn von Operatoren) ist allerdings die weit einfachere Schreibweise wie folgt erlaubt
cin >> a;