Перегрузить метод или использовать значения по умолчанию? C ++

Я все еще относительно новичок в C ++, и я не могу понять разницу в следующих двух способах кодирования функции, которая может принимать один параметр или, возможно, два, три или более. Во всяком случае, вот моя точка

перегрузка функции:

int aClass::doSomething(int required)
{
    //DO SOMETHING
}

int aClass::doSomething(int required, int optional)
{
    //DO SOMETHING
}

чем это отличается от значения по умолчанию:

int aClass::doSomething(int required, int optional = 0)
{
    //DO SOMETHING
}

Я знаю, что в разных обстоятельствах одно может быть более подходящим, чем другое, но о каких вещах я должен знать при выборе между каждым из этих вариантов?

Ответы на вопрос(4)

Ваш ответ на вопрос