[C++] примитивный вопрос по классам
судя по тому, что в теле присутствуют члены некоего класса, эта перегрузка внутри класса => у этого оператора лишний входной параметр...
сделай эту функцию глобальной и пропиши ее friend-ом в классе и соответственно, замени v[i]=v1.v[i]*vc на v1.v[i]*=vc; а также оставь второй вариант оператора в классе...
а зачем возвращать ссылку? а не значение?
vector v;
v*2*3;
не вызывался конструктор копирования при умножении на 3.
Да, бинарные операторы надо выносить в global, и прописывать их friend в своём классе.
спасиба
для данного примера совершенно не обязательно делать умножение френдом ( потому как доступ весь нужный получается через паблик методы думаю ругается он потому, что ты получаешь cons vector& и видимо после умножения возвращаешь полученный вектор, но уже в виде vector&. вообще семантика операторов бинарных такова что они возвращают Т, а не Т&; Т& возвращают как правило операторы с присваиванием типа *=.
А если написать что-нибудь вроде v*2 + v*3?
budet v*5, а собственно зачем?
Если в результате умножения возвращается ссылка, то разве не получится, что ссылки на v*2 и на v*3 совпадут?
Данная запись вообще всегда будет неверный результат давать, что копируй, что не копируй, потому что при этом меняется содержимое вектора.
Другое дело, что можно написать по-другому и копировать локальную относительно оператора переменную. Тогда выражение будет посчитано правильно.
Это как? Примерно обрисуй
У него вообще нет описания класса, поэтому нельзя говорить, что весь доступ есть через паблик методы. А даже если бы и был, то всё равно лучше писать friend'ы. Так же в примерах у него вообще не было return в его операторах, и ругался компилятор на неправильную попытку перегрузки operator* И да, я согласен что из некоторых операторов лучше возвращать новый объект.
V operator* (const int m, V& v)
{
V newV;
newV.m_n = v.m_n*m;
return newV;
}
V operator* (V& v, const int m)
{
return operator*(m, v);
}
class V
{
public:
V operator+ (const V& v)
{
V newV;
newV.m_n = m_n;
newV.m_n += v.m_n;
return newV;
}
}
Оставить комментарий
geja_03
Пачиму это не компилится?
Проблема в том что это
дает умножение тока с одной стороны