Основы объектно-ориентированного программирования на языке C# book | Page 145

7.7 Полiморфiзм static void Main( string [] args)
{ Point2D p1 = new Point2D(); Point2D p2 = new Point2D(); Point2D p3 = new Point2D(); Point2D p4 = new Point2D();
p1 = p2 ++; // Постфiксна. p1. Display( p1); //( 0,0) p2. Display( p2); //( 1,1) p3 =++ p4; // Префiксна. p3. Display( p3); //( 1,1) p4. Display( p4); //( 1,1) p1 = p4- p3; p1. Display( p1); //( 0,0) } }
При перевантаженнi бiнарних операцiй не обов’ язково передавати ïй операнди однакового типу. Але важливо пам’ ятати, при цьому, що якщо необхiдно передавати операнди в будь-якому порядку, то необхiдно реалiзовувати обидвi версiï методу.
З перевантаженням бiнарних операцiй питань не повино виникати.
Розберемо детальнiше перевантаження унарних операцiй. Нехай є двi змiннi типу Point2D.
Point2D a = new Point2D( 0,0); Point2D b = new Point2D( 0,0);
Обчислимо a = b ++;
Цей запис матиме таку семантику:
а) Point2D temp = b;
Змiнна temp класу Point2D буде указувати на ту саму дiлянку пам’ ятi, що й b, тобто значення temp- >( x, y) i b- >( x, y) спiвпадають.
б) b = operator ++( b);
Змiнна b буде указувати на НОВУ дiлянку пам’ ятi, де зберiгається значення на 1 бiльше,( x + 1, y + 1) нiж вихiдне значення( x, y). Змiнна продовжує temp указувати на вихiдне значення( x, y).
в) a = temp;
Змiнна y стане указувати на ту ж саму дiлянку пам’ ятi що й temp, тобто на( x, y). Тодi, якщо b указувало на значення( 0,0) то пiсля
145