Вау, это запутанный код, с повторно используемыми именами переменных, странными нетрадиционными операциями и тому подобным.Код особенно трудно следовать, потому что V
может быть неявно составлен из целого числа, причем 7 всегда добавляется к этому целому числу;даже с отладчиком это заняло у меня несколько минут.Пожалуйста, никогда не пишите такой код, даже для развлечения!
Результат -v
в main
- это не int
.Это V
объект, неявно созданный из выражения 2 * v
(= 26), в результате чего получается целое число члена со значением 33 (26 + 7).
Это как если бы вы написали:
V operator-()
{
return V(2 * v);
}
или из-за аргумента по умолчанию:
V operator-()
{
return V(2 * v, 7);
}
Затем вы берете этот новый возвращенный объект и передаете его члену operator-(const V&)
;применяется та же история.Это производит выражение 3*33 + 2*13 + 3
, которое является 128;опять же, это используется для создания нового V
(потому что это тип возврата!), поэтому добавьте 7, чтобы получить 135.
operator-(int lop, const V& rop)
не входит в него, потому что вы никогда не выполняли вычитание междуint
и V
.