Come mai l'istruziome throw lancia solo il nome della classe (di solito non si lavora con gli oggetti ? )
codice:
throw MyException (" il nomero e' negativo: ", i );
Non lo vedi che lancia un oggetto temporaneo? Lo fa chiamando il costruttore (nome della classe) e, in questo caso, passandogli anche dei parametri.

Per quanto riguarda l`output, hai dimenticato di tener traccia di un altro costruttore: il costruttore di copia. Piazza un output anche in quello e vedrai che probabilmente capirai il meccanismo che sta dietro a tutto cio`. Se hai problemi riposta.