Перегрузка операции присваивания для класса - C (СИ)
Формулировка задачи:
Поискал по форуму но подобной проблемы не нашел. Вот код класса:
Код как я обращаюсь к операции присваивания:
Проблема в том что код компилируется (использую visual), и даже во время отледки я смотрел объекту tmp присваивается значение объекта укзанного в качестве аргумента, но почему эти значения не присваиваются объекту R2. В итоге выводится:
Vivod operacii prisvaivania romba
Coordinati peresecheniya diagonalei: x=0, y=0
Dlina 1 diagonali: 0
Dlina 1 diagonali: 0
class Romb { public: Romb () //Крнструктор по умолчанию { x=y=diagonal1=diagonal2=0; } Romb (int xx,int yy,int diagonal) //Констркутор квадрата { x=xx; y=yy; diagonal1=diagonal2=diagonal; } Romb (int xx,int yy,int diag1,int diag2) //Конструктор произвольного ромба { x=xx; y=yy; diagonal1=diag1; diagonal2=diag2; } void output () //Метод класса для вывода данных класса { printf ("Coordinati peresecheniya diagonalei: x=%d, y=%d\n", x,y); printf ("Dlina 1 diagonali: %d\n", diagonal1); printf ("Dlina 2 diagonali: %d\n", diagonal2); } Romb operator = (Romb &X); private: // Здесь хранятся данные класса int x,y; //координаты пересечения диагоналей ромба int diagonal1,diagonal2; // длины диагоналей ромбы }; Romb Romb::operator =(Romb &X) { Romb tmp; tmp.x=X.x; tmp.y=X.y; tmp.diagonal1=X.diagonal1; tmp.diagonal2=X.diagonal2; return tmp; }
Romb R1 (4,6,8,10); printf ("Vivod 1 romba\n"); Romb R2; R2=R1; printf ("\n\nVivod operacii prisvaivania romba\n"); R2.output ();
Решение задачи: «Перегрузка операции присваивания для класса»
textual
Листинг программы
Romb Romb::operator =(Romb &X) { x=X.x; y=X.y; diagonal1=X.diagonal1; diagonal2=X.diagonal2; return *this; }
Объяснение кода листинга программы
- Объявляется метод
operator=
для классаRomb
. - Устанавливаются значения переменных
x
,y
,diagonal1
,diagonal2
равными соответствующим переменным объектаX
. - Возвращается ссылка на текущий объект
*this
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д