Я реализую векторный класс, и я должен получить противоположность некоторого вектора. Действительно ли возможно определить эту перегрузку оператора использования метода?
Вот то, что я имею в виду:
Vector2f vector1 = -vector2;
Вот то, что я хочу, чтобы этот оператор выполнил:
Vector2f& oppositeVector(const Vector2f &_vector)
{
x = -_vector.getX();
y = -_vector.getY();
return *this;
}
Спасибо.
Да, но вы не предоставляете его параметром:
class Vector {
...
Vector operator-() {
// your code here
}
};
Обратите внимание, что вы не должны возвращаться * это. Унарный - оператор должен создать совершенно новое векторное значение, не изменить то, что она применяется, чтобы ваш код мог захотеть посмотреть что-то подобное:
class Vector {
...
Vector operator-() const {
Vector v;
v.x = -x;
v.y = -y;
return v;
}
};
Теперь, когда вы знаете разницу между «= =» и «=», позвольте мне высказать вам некоторые слова предосторожности. Несмотря на то, что «= =» используется в качестве стандартного теста равенства между сопоставимыми переменными и «=», используемыми в качестве внутреннего назначения по типу, следующая ошибка программирования является довольно распространенной.
В приведенном ниже примере и аналогичных кодах «» = «» называется условным оператором «» 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;
}
Таким образом, слово предостережения - «Никогда не используйте ' =
' в , если
высказываний, если в вашем сознании нет чего-то злого»
C # 4 не разрешит написанный код, поскольку метод AddCars
ожидает IEnumerable < Car >
, реализующий IPainting
. Это не означает, что вы можете пройти любой класс, реализующий IPainting
(например, вы можете иметь класс Bike: IPainting
, который не имеет никакого отношения к классу Car
. Однако это позволит другим путям вокруг; при наличии коллекции void AddCars (IEnumerable < IPainting >)
можно передать методу List < Car >
.
До тех пор нужно будет придерживаться передачи последовательностей Car
методу, используя некоторый механизм литья (например, картины .Cast < Car > ()
, предложенный в других ответах).
Это
Vector2f operator-(const Vector2f& in) {
return Vector2f(-in.x,-in.y);
}
Может быть внутри класса или снаружи. Мой образец находится в области пространства имен.