В известном мультфильме о Винни Пухе и Пятачке Винни делает заключение относительно НЕПРАВИЛЬНОСТИ пчёл. Очевидно, что по его представлению объекты-представители ЭТОГО класса пчёл НЕ удовлетворяют некоторому критерию.
В программе можно непосредственно поинтересоваться по поводу значения некоторого поля объекта:
Point2D p1 = new Point2D(GetVal(), GetVal());
::::::::::
// Это всё равно логическое выражение!
if (p1.x == 125) {/*…*/}
Так почему же не спросить об этом у объекта напрямую?
Хотя бы так:
// Критерий истинности объекта зависит от разработчика.
// Если значение выражения в скобках примет значение true,
// то пчела окажется правильной!
if (p1) {/*…*/}
В классе может быть объявлена операция (операторная функция) true, которая возвращает значение bool типа true для указания факта true и возвращает false в противном случае. Подобная операция полезна для типов, представляющих true, false, и null (ни истина, ни ложь), как это бывает при работе с базами данных.
Подобные типы (классы) могут быть использованы для управляющих выражений в if, do, while, for предложениях, а также в условных выражениях.
Если в классе была определена операция true, необходимо там же определить операцию false.
// Перегрузка булевских операторов. Это ПАРНЫЕ операторы.
// Объекты типа Point2D приобретают способность судить о правде и лжи!
// А что есть истина? Критерии ИСТИННОСТИ (не путать с истиной)
// могут быть самые разные.
public static bool operator true (Point2D par)
{
if (par.x == 1.0F && par.y == 1.0F) return true;
else return false;
}
public static bool operator false (Point2D par)
{
if (par.x == 0.0F && par.y == 0.0F) return false;
else return true;
}