Most can be overloaded. The only C operators that can't be are "." and "?:" (and "sizeof", which is technically an operator). C++ adds a few of its own operators, most of which can be overloaded except "::" and ".*".
Here's an example of the subscript operator (it returns a reference): (First conditional clauses are without operator overloading.)
class Array {
public:
#if 0
int& elem(unsigned i) { if (i>99) error(); return data[i]; }
#else
int& operator[] (unsigned i) { if (i>99) error(); return data[i]; }
#endif
private:
int data[100];
};
main()
{
Array a;
#if 0
a.elem(10) = 42;
a.elem(12) += a.elem(13);
#else
a[10] = 42;
a[12] += a[13];
#endif
}