При помощи объектов. При выбрасывании исключения с помощью throw создается временный объект, который затем передается механизму обработки исключений. Тип этого объекта определяет, какой обработчик catch будет выбран.
Вот пример демонстрации сохранения исключений в виде объектов:
c