Как перегрузить оператор унарный минус в C++?

Я реализую векторный класс, и я должен получить противоположность некоторого вектора. Действительно ли возможно определить эту перегрузку оператора использования метода?

Вот то, что я имею в виду:

Vector2f vector1 = -vector2;

Вот то, что я хочу, чтобы этот оператор выполнил:

Vector2f& oppositeVector(const Vector2f &_vector)
{
 x = -_vector.getX();
 y = -_vector.getY();

 return *this;
}

Спасибо.

69
задан nos 28 January 2010 в 14:55
поделиться

2 ответа

Да, но вы не предоставляете его параметром:

class Vector {
   ...
   Vector operator-()  {
     // your code here
   }
};

Обратите внимание, что вы не должны возвращаться * это. Унарный - оператор должен создать совершенно новое векторное значение, не изменить то, что она применяется, чтобы ваш код мог захотеть посмотреть что-то подобное:

class Vector {
   ...
   Vector operator-() const {
      Vector v;
      v.x = -x;
      v.y = -y;
      return v;
   }
};
118
ответ дан 24 November 2019 в 13:45
поделиться

Теперь, когда вы знаете разницу между «= =» и «=», позвольте мне высказать вам некоторые слова предосторожности. Несмотря на то, что «= =» используется в качестве стандартного теста равенства между сопоставимыми переменными и «=», используемыми в качестве внутреннего назначения по типу, следующая ошибка программирования является довольно распространенной.

В приведенном ниже примере и аналогичных кодах «» = «» называется условным оператором «» Always true «».

#include<stdio.h>
int main()
{
    int i = 10, j = 20;
    if ( i = j )
        printf("Equal\n");
    else
        printf("NOT Equal\n");
    return 0;
}

Таким образом, слово предостережения - «Никогда не используйте ' = ' в , если высказываний, если в вашем сознании нет чего-то злого»

. -121--4088921-

C # 4 не разрешит написанный код, поскольку метод AddCars ожидает IEnumerable < Car > , реализующий IPainting . Это не означает, что вы можете пройти любой класс, реализующий IPainting (например, вы можете иметь класс Bike: IPainting , который не имеет никакого отношения к классу Car . Однако это позволит другим путям вокруг; при наличии коллекции void AddCars (IEnumerable < IPainting >) можно передать методу List < Car > .

До тех пор нужно будет придерживаться передачи последовательностей Car методу, используя некоторый механизм литья (например, картины .Cast < Car > () , предложенный в других ответах).

-121--4594669-

Это

Vector2f operator-(const Vector2f& in) {
   return Vector2f(-in.x,-in.y);
}

Может быть внутри класса или снаружи. Мой образец находится в области пространства имен.

27
ответ дан 24 November 2019 в 13:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: