перегрузить



Автор Mr.x xxx задал вопрос в разделе Другие языки и технологии

как в С++ В ООП перегрузить с помощью дружественных функций && и ||? и получил лучший ответ

Ответ от ?????? Зелёный змий ??????[гуру]
Так же как и все остальные.
class foo
{
friend foo operator &&(const foo& a, const foo& b);
friend foo operator ||(const foo& a, const foo& b);
};
foo operator &&(const foo& a, const foo& b)
{
foo r;
// TODO
return r;
}
foo operator ||(const foo& a, const foo& b)
{
foo r;
// TODO
return r;
}

Ответ от Glueon glueon[гуру]
Юрий Павлович абсолютно прав. Вопрос стоял как как перегрузить операторы.
не перегруженный оператор выглядит так
bool operator &&(bool a, bool b);
bool заменили на foo, получили перегруженный оператор. Все достаточно тривиально.
А вот зачем это нужно, где и как будет использоваться перегруженный оператор, какой тип оператор должен возвращать - об это ни слова, и осталось где то за кадром, скорее всего в башке какого то "умного" препода.
А то что перегружать операторы && И || не рекомендуется, с этим совершенно согласен. И очень трудно придумать задачу (реальную, а не какую то преподавательскую фикцию) , в которой может возникнуть потребность перегружать логические операторы. В классе Юрия Павловича проще определить operator bool() для логичеческих операторов, не перегружая самих логических операторов.

Ответ от Daniel Gulchuck[активный]
Насколько я помню, логические операторы не перегружаемы в цпп.

Ответ от Excelsior[гуру]
Оба ответа выше НЕПРАВИЛЬНЫ. Первый неправилен потому, что операторы && и || должны возвращать булевское значение, а не какой-то там объект типа foo. Второй ответ неправилен потому, что операторы && и ||, в принципе, перегрузить можно.
Правильный ответ такой: операторы && и || перегрузить МОЖНО, но делать это КРАЙНЕ НЕ РЕКОМЕНДУЕТСЯ. Сам по себе перегрузочный код несложен, например, такой, как у Юрия Павловича, с той только разницей, что операторы должны возвращать bool, а не foo. Но не всё, что в С++ сделать МОЖНО, является хорошей идеей. Эта - плохая. Стандартные операторы && и || в С++ снабжены семантикой сокращенного вычисления. А именно, если вычисление левого аргумента у оператора && даёт false, то правый аргумент вообще не вычисляется, потому что общий результат все равно будет false. Точно так же, если вычисление левого аргумента у оператора || даёт true, то правый аргумент вообще не вычисляется, потому что общий результат все равно будет true. Cохранить эту семантику при перегрузке операторов && и || НЕВОЗМОЖНО: при применении перегруженных операторов всегда будут вычисляться ОБА аргумента. Поэтому известный C++ FAQ Маршалла Клайна настоятельно не рекомендует перегружать операторы && и ||.

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: как в С++ В ООП перегрузить с помощью дружественных функций && и ||?
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*