tome operator+(tome& add); // The UML says tome&, but it should probably be const tome&
friend ostream& operator<<(ostream& output, const tome& t);
voidoperator=(const tome& oldTome);
^^^ that seems trivial, unless you write a large equation that way. Take the basic poly/poly derivative formula, and replace every operator with a function call for a modest example. Its really, really, really nice to be able to write math that looks mostly like math. You still can't use some of the exotic stuff, like sum/product notation, but its a good start.
Basically, yes. You can't redefine the meaning of * for regular ints, if that's what you're asking. It needs to be used with user-defined types (like a class or enum).
However, it can be overused. You should only use it in very obvious ways, usually with mathematical entities. Also, you are stuck with the built-in precedence rules, which is somewhat of a problem with <<. E.g., std::cout << a & b << '\n' looks okay, but since << has higher precedence than & it's meaning is (std::cout << a) & (b << '\n'), which doesn't make sense. It needs to be written with parens std::cout << (a & b) << '\n'