Внедрение унарного вычитания, отрицания, минус оператора, «оператора» в классе

Я рассматриваю реализацию унарного оператора «отрицание», «инверсия знака» или «вычитание», вероятно, в качестве функции друга для моего класса.

Мое предположение о правильном способе сделать это:

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: разорвал пример с Вот

0

Решение

Унарный оператор принимает ровно один аргумент (отсюда унарный). Если вы хотите реализовать ее как функцию, не являющуюся членом, вы можете определить ее следующим образом:

inline cents operator-(cents const& value)
{
return cents(-value.m_cents);
}

Конечно, подпись friend декларация должна соответствовать определению.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]