Re[4]: Перегрузка операций (дубль два с исходниками)
От: grs Россия  
Дата: 25.01.02 08:56
Оценка:
Здравствуйте Гарин Георгий, Вы писали:

ГГ>Здравствуйте Андрей Тарасевич, Вы писали:


АТ>>>"Лишние" вызовы конструкторов и деструкторов возникают в частности из за того, что ты передаешь объекты в оператор '+' по значению. Это приводит к созданиям промежуточных объектов-копий. Это совершенно не нужно. Предевать следует константные ссылки:


АТ>>>polynom polynom::operator=(const polynom&);

АТ>>>polynom polynom::operator+(const polynom&);

АТ>>Еще одно уточнение: оператор '+' не модифицирует своего левого операнда, поэтому соответствующий метод следует объявить как константный:


АТ>>polynom polynom::operator=(const polynom&);

АТ>>polynom polynom::operator+(const polynom&) const;
ГГ> И не создавать временный объект, что-ли, т.е. писать this->.... = this-> ... + что-то
ГГ> return*this
ГГ> Так?
Не так. Временный объект тебе создавать придется — ты же где-то должен получить результат, а this изменять не верно, т.к. это operator +, а не operator += (да и как тут было справедливо замечено его правильно было бы объявить как const).

ГГ> А как быть со вторым вопросом?

ГГ> polynom a(2),b(2),*c
ГГ> c=a*b — это можно сделать и как?
Можно.
[code]
polinom* polinom::operator*(const polinom&) const
{
polinom* res = new polinom;
...
какой-то код
...
return res;
}
[\code]
Только на мой взляд не нужно (но это из серии "О вкусах не спорят").

Да, а чего я действительно не понял, так это зачем класс polinom делать наследником класса copmlex? Он по-моему к нему никаких родственных отношений не имеет.
И еще одна мелочь: деструктор класса наследника необязательно объявлять virtual, если он объявлен в базовом классе как virtual. Не лениво лишний раз по клавишат бить?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.