Координаты точки Ь: 10, 10, 10 Результат сложения а + Ь: 11, 12, 13 Результат сложения а+Ь+с: 22, 24, 26 Результат вычитания с - а: 21,
Результат вычитания с - b: 11, 12, 13
Внимательно проанализируем приведенную выше программу, начиная с перегружаемого оператора +. Когда оператор + оперирует двумя объектами типа ThreeD, то величины их соответствующих координат складываются, как показано в объявлении операторного метода operator+. Следует, однако, иметь в виду, что этот оператор не видоизменяет значения своих операндов, а лишь возвращает новый объект типа ThreeD, содержащий результат операции сложения координат. Для того чтобы стало понятнее, почему операция + не меняет содержимое объектов, выступающих в роли ее операндов, обратимся к примеру обычной операции арифметического сложения: 10 + 12. Результат этой операции равен 22, но она не меняет ни число 10, ни число 12. Несмотря на то что ни одно из правил не препятствует перегруженному оператору изменить значение одного из своих операндов, все же лучше, чтобы действия этого оператора соответствовали его обычному назначению.
Обратите внимание на то, что методoperator+ возвращает объект типаThreeD.Этот метод мог бы возвратить значение любого допустимого в C# типlb, но благодаря тому что он возвращает объект типаThreeD,оператор + можно использовать в таких составных выражениях, какa+b+с.В данном случае выражениеа+bдает результат типаThreeD,который можно затем сложить с объектомстого же типа. Если бы
выражение а+b давало результат другого типа, то вычислить составное выражениеa+b+сбыло бы просто невозможно.
Следует также подчеркнуть, что когда отдельные координаты точек складываются в оператореoperators- , то в результате такого сложения получаются целые значения, поскольку отдельные координаты х, у и z представлены целыми величинами. Но сама перегрузка оператора + для объектов типаThreeDне оказывает никакого влияния на операцию сложения целых значений, т.е. она не меняет первоначальное назначение этого оператора.