Es porque no puede sobrecargar operadores para un tipo de puntero; solo puede sobrecargar un operador donde al menos uno de los parámetros (operandos) es del tipo de clase o tipo de enumeración.
Por lo tanto, si tiene un puntero a un objeto de algún tipo de clase que sobrecarga el operador de subíndice, debe desreferenciar ese puntero para llamar a su operador de subíndice sobrecargado.
En su ejemplo, a
tiene tipo MyClass*
; este es un tipo de puntero, por lo que se usa el operator[]
incorporado para los punteros. Cuando desreferencia el puntero y obtiene un MyClass
, tiene un objeto de clase, por lo que se utiliza el operator[]
sobrecargado.
También podría hacer 'a [0] [1]' ;-) – fredoverflow