c ++: оператор ссылки на тип класса = использование - PullRequest
0 голосов
/ 03 июня 2018

это мой самый первый пост, и, пожалуйста, поймите, если форматирование плохое X)

Итак, в моем классе мне пришлось использовать функцию operator =, чтобы сделать объект класса равным второму объекту объекта.того же класса.

class Car
{
private :
    int a;
    int b;
public :
    void set(int x, int y)
    {a = x;
     b = y;
    }

    void output()
    {cout << a << " " << b << endl;
    }

    Car & operator=(const Car & carB)
    {set(int c, int d);
    }
};

using namespace std;
int main()
{
 Car car1(1, 2);
 Car car2;

 car2=car1;
 car2.output();

 return 0;
}

Я понимаю, что функция Car & operator = (const Car & carb) позволяет мне сделать car2 равным car 1. Однако я не совсем понимаю тип функцииВот.Почему функция не аннулирована?И что обозначения ссылок (оба) делают в этом коде?

Я нахожусь на моем 2-м квартале самого первого компьютерного языка.Пожалуйста помоги!Спасибо!:]

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

Тип функции не является пустым, потому что C ++ допускает такие выражения:

A = B = C;

После выполнения этого оператора все три переменные будут иметь одинаковое значение.Другими словами,

A = (B = C);

, который требует, чтобы B=C возвращал вещь того же типа, что и A.

Что касается того, что делает ссылочный символ ('%'),найдите это в своем учебнике.

0 голосов
/ 03 июня 2018

Это называется assignment operator, и вам не нужно реализовывать его, так как он существует по умолчанию.Если у вас есть указатели в классе, вы можете реализовать свои собственные assignment operator и copy constructor, чтобы делать глубокое копирование вместо мелкого.

Знак ссылки означает возврат по ссылке, что позволяет вызовам функций находиться слевастороны вызова, и допускает каскадное назначение, например A = B = C.

последнее ... Ваш код в assignment operator неверен.Должно быть так:

set(carB.a, carB.b);
...