Перегрузка операции присваивания для класса - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Поискал по форуму но подобной проблемы не нашел. Вот код класса:
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 ();
Проблема в том что код компилируется (использую visual), и даже во время отледки я смотрел объекту tmp присваивается значение объекта укзанного в качестве аргумента, но почему эти значения не присваиваются объекту R2. В итоге выводится: Vivod operacii prisvaivania romba Coordinati peresecheniya diagonalei: x=0, y=0 Dlina 1 diagonali: 0 Dlina 1 diagonali: 0

Решение задачи: «Перегрузка операции присваивания для класса»

textual
Листинг программы
 Romb Romb::operator =(Romb &X)
 {
         x=X.x;
         y=X.y;
         diagonal1=X.diagonal1;
         diagonal2=X.diagonal2;
         return *this;
 }

Объяснение кода листинга программы

  1. Объявляется метод operator= для класса Romb.
  2. Устанавливаются значения переменных x, y, diagonal1, diagonal2 равными соответствующим переменным объекта X.
  3. Возвращается ссылка на текущий объект *this.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5
Похожие ответы