Я рассматриваю реализацию унарного оператора «отрицание», «инверсия знака» или «вычитание», вероятно, в качестве функции друга для моего класса.
Мое предположение о правильном способе сделать это:
namespace LOTS_OF_MONNIES_OH_YEAH { // sorry, couldn’t resist using this namespace name
class cents
{
public:
cents(const int _init_cents)
: m_cents(_init_cents)
{
}public:
friend inline cents operator-(const cents& _cents);
private:
int m_cents;
};inline cents operator-(const cents& _cents)
{
return cents(-(_cents.m_cents));
}
}
Правильно ли мое предположение?
PS: В идеале имена пространств имен должны быть в нижнем регистре, так как верхний регистр часто используется исключительно для констант, однако я думал, что верхний регистр оказал большее влияние.
PPS: разорвал пример с Вот
Унарный оператор принимает ровно один аргумент (отсюда унарный). Если вы хотите реализовать ее как функцию, не являющуюся членом, вы можете определить ее следующим образом:
inline cents operator-(cents const& value)
{
return cents(-value.m_cents);
}
Конечно, подпись friend
декларация должна соответствовать определению.
Других решений пока нет …