Люди подскажите пожалуйста почему в C++ операции =,(),[] и -> можно перегружать только как методы класса.
Надо начать с того, что изначально в первых версия C++ не было понятия дружественных функций и все перегрузки делались как члены класса. Потом Страуструп заметил, что некоторым операторам (типа operator+ и др. арифметическим) желательно иметь "симметричность" относительно операндов и, в конце концов, он не нашел ничего лучшего как придумать дружественные функции. Так что к твоему вопросу надо подходить с другого конца: не "почему указанным операторам нельзя быть друзьями класса", а "почему другим операторам разрешили быть друзьями" (на это я ответил выше).
Операторы [], () и -> всегда относятся к левому операнду, если бы им позволили быть друзьями, то это не создало бы ничего, кроме глупых и, возможно, труднонаходимых ошибок, поэтому Страуструп позаботился о программистах и разрешил этим операторам быть только членами класса.
Или подскажите литературу где моно почитать?
Б. Страуструп, Дизайн и эволюция C++. Ну и егошный учебник, конечно.