Автор 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() для логичеческих операторов, не перегружая самих логических операторов.
Юрий Павлович абсолютно прав. Вопрос стоял как как перегрузить операторы.
не перегруженный оператор выглядит так
bool operator &&(bool a, bool b);
bool заменили на foo, получили перегруженный оператор. Все достаточно тривиально.
А вот зачем это нужно, где и как будет использоваться перегруженный оператор, какой тип оператор должен возвращать - об это ни слова, и осталось где то за кадром, скорее всего в башке какого то "умного" препода.
А то что перегружать операторы && И || не рекомендуется, с этим совершенно согласен. И очень трудно придумать задачу (реальную, а не какую то преподавательскую фикцию) , в которой может возникнуть потребность перегружать логические операторы. В классе Юрия Павловича проще определить operator bool() для логичеческих операторов, не перегружая самих логических операторов.
Ответ от Daniel Gulchuck[активный]
Насколько я помню, логические операторы не перегружаемы в цпп.
Насколько я помню, логические операторы не перегружаемы в цпп.
Ответ от Excelsior[гуру]
Оба ответа выше НЕПРАВИЛЬНЫ. Первый неправилен потому, что операторы && и || должны возвращать булевское значение, а не какой-то там объект типа foo. Второй ответ неправилен потому, что операторы && и ||, в принципе, перегрузить можно.
Правильный ответ такой: операторы && и || перегрузить МОЖНО, но делать это КРАЙНЕ НЕ РЕКОМЕНДУЕТСЯ. Сам по себе перегрузочный код несложен, например, такой, как у Юрия Павловича, с той только разницей, что операторы должны возвращать bool, а не foo. Но не всё, что в С++ сделать МОЖНО, является хорошей идеей. Эта - плохая. Стандартные операторы && и || в С++ снабжены семантикой сокращенного вычисления. А именно, если вычисление левого аргумента у оператора && даёт false, то правый аргумент вообще не вычисляется, потому что общий результат все равно будет false. Точно так же, если вычисление левого аргумента у оператора || даёт true, то правый аргумент вообще не вычисляется, потому что общий результат все равно будет true. Cохранить эту семантику при перегрузке операторов && и || НЕВОЗМОЖНО: при применении перегруженных операторов всегда будут вычисляться ОБА аргумента. Поэтому известный C++ FAQ Маршалла Клайна настоятельно не рекомендует перегружать операторы && и ||.
Оба ответа выше НЕПРАВИЛЬНЫ. Первый неправилен потому, что операторы && и || должны возвращать булевское значение, а не какой-то там объект типа foo. Второй ответ неправилен потому, что операторы && и ||, в принципе, перегрузить можно.
Правильный ответ такой: операторы && и || перегрузить МОЖНО, но делать это КРАЙНЕ НЕ РЕКОМЕНДУЕТСЯ. Сам по себе перегрузочный код несложен, например, такой, как у Юрия Павловича, с той только разницей, что операторы должны возвращать bool, а не foo. Но не всё, что в С++ сделать МОЖНО, является хорошей идеей. Эта - плохая. Стандартные операторы && и || в С++ снабжены семантикой сокращенного вычисления. А именно, если вычисление левого аргумента у оператора && даёт false, то правый аргумент вообще не вычисляется, потому что общий результат все равно будет false. Точно так же, если вычисление левого аргумента у оператора || даёт true, то правый аргумент вообще не вычисляется, потому что общий результат все равно будет true. Cохранить эту семантику при перегрузке операторов && и || НЕВОЗМОЖНО: при применении перегруженных операторов всегда будут вычисляться ОБА аргумента. Поэтому известный C++ FAQ Маршалла Клайна настоятельно не рекомендует перегружать операторы && и ||.
Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: как в С++ В ООП перегрузить с помощью дружественных функций && и ||?
спросили в Музыка
по гитарам. как настроить перегруз на комбике cruzer cr 15g?
если он там есть (лень искать описание) , то переключателем выбирается канал (клин\\перегруз) , и
подробнее...
по гитарам. как настроить перегруз на комбике cruzer cr 15g?
если он там есть (лень искать описание) , то переключателем выбирается канал (клин\\перегруз) , и
подробнее...
спросили в Пассажиры Пассажир
Какой штраф за перегруз легкового автомобиля, пассажирами?
Это называется не перегруз а превышение пассажировместимости. КоАП, ст. 12.23, часть 1 - 500
подробнее...
Какой штраф за перегруз легкового автомобиля, пассажирами?
Это называется не перегруз а превышение пассажировместимости. КоАП, ст. 12.23, часть 1 - 500
подробнее...
Багаж ( перегруз) сколько за это доплачивать
На сайт авиакомпании зайдите. Там есть цены за
подробнее...
В чем причина эмоциональлного перегруза?
Эмоциональный перегруз случается при очень личном пропускании через себя всех происходящих вокруг
подробнее...
спросили в 8 год
Перегруз стиральной машины
стирай смело, только без отжима.... на отжиме можно повредить амортизаторы... а так ни че ей не
подробнее...
Перегруз стиральной машины
стирай смело, только без отжима.... на отжиме можно повредить амортизаторы... а так ни че ей не
подробнее...
Ответ от 3 ответа[гуру]
Привет! Вот еще темы с похожими вопросами:
спросили в Музыка
Что такое эффект перегруза на электрогитаре?
Русское народное, частушечное.
Ухвачу я гитариста
За живой гитарный гриф
Нефиг
подробнее...
Что такое эффект перегруза на электрогитаре?
Русское народное, частушечное.
Ухвачу я гитариста
За живой гитарный гриф
Нефиг
подробнее...
сколько стоит1кг перегруза в аэропорту домодедово. сегодня улетаю 55 кг всего а денег не знаю сколько взять
перегруз оплачивается не аэропорту, а авиакомпании
на сайте авиакомпании всё расписано про
подробнее...
спросили в Музыка Звук
Имеется комбик Fender Mustang I, который на перегрузе выдает довольно стремный звук. Можно ли к нему взять педаль чтоб
Вообще есть вариант, который наиболее универсален, недорог, и действенен:
- если есть
подробнее...
Имеется комбик Fender Mustang I, который на перегрузе выдает довольно стремный звук. Можно ли к нему взять педаль чтоб
Вообще есть вариант, который наиболее универсален, недорог, и действенен:
- если есть
подробнее...