Jeśli chcemy przeładować jakąś nazwę czy to funkcji czy operatora mamy na celu zdefiniowanie innego sposobu ich wykonania dla różnych obiektów. throw nie jest nawet operatorem bo nie zwraca żadnej wartości. Mamy takie coś
throw obA;
throw obB;
chcemy aby dla obiektu typu A i B wywołanie throw było inne. Zastanówmy się co moglibyśmy zrobić w "funkcji przeładowywującej". Na bank musielibyśmy użyć wewnątrz jej throw i "rzucić dalej obiekt" bo własnej implementacji nie będziemy pisać. Przedtem moglibyśmy zrobić rzeczy związane z konkretnym typem obiektu. Np zmiana jego wartości lub wypisanie jakiejśc informacji na ekranie. Ale przecież to samo mozna by było uzyskać pisząc to po prostu w kodzie.
Np:
#include <iostream>
class Obiekcik
{
public:
int a;
};
class Obiekcik2
{
public:
int b;
};
int main()
{
Obiekcik ob;
ob.a = 5;
Obiekcik2 ob2;
ob2.b = 10;
try
{
std::cout <<"Rzucam ob";
ob.a = 2345;
throw ob;
std::cout <<"Rzucam ob2";
ob2.b = 543;
throw ob2;
}
catch(Obiekcik & ob)
{
std::cout << ob.a << "\n";
}
catch(Obiekcik2 & ob)
{
std::cout << ob.b << "\n";
}
std::cin.get();
}
Dlatego właśnie przeładowywanie throw jest bezsensu