С++ что значит other.x или other.y, как работает функционал и зачем там точка? вывод по факту того же other но без .x
Struct Vector2
{
float x, y;
Vector2(float x, float y)
:x(x), y(y){}
Vector2 Add(const Vector2& other)const
{
return Vector2(x + other.x, y + other.y);;
} но без .x не работает
Нужно соблюдать типизацию.
x - имеет тип float
other - имеет тип Vector2
и поэтому вы не можете просто так взять и (x + other) сложить float c Vector2. Хотя бы по причине - какой тип должен быть в результате этого сложения? float Vector или что-то другое... Компилятор этого не знает. Так же он не имеет права сам додумаывать что к этому иксу нужно приплюсовать именно другой икс. Вдруг у вас хитрый алгоритм с перекрестным сложением (x+y и y+x).
то есть через other.x мы можем обратиться к конструктору Vector2 игнорируя x объявленный в начале класса?
#include <iostream>
#include <cmath>
using namespace std;
struct Coord {
double x;
double y;
Coord() : x(0.0), y(0.0) {}
Coord(const double x, const double y) : x(x), y(y) {}
double distance(const Coord& coord) const {
return sqrt(pow(x - coord.x, 2) + pow(y - coord.y, 2));
}
private:
friend ostream& operator<<(ostream& out, const Coord& coord) {
return out << '(' << coord.x << ", " << coord.y << ')';
}
};
class Vector2D {
public:
Vector2D() = default;
Vector2D(const Coord& point) : point(point) {}
double distance() const {
return origin.distance(point);
}
Vector2D add(const Vector2D& vector) {
const auto x = point.x + vector.point.x;
const auto y = point.y + vector.point.y;
const Coord coord{ x, y };
return Vector2D{ coord };
}
private:
Coord origin;
Coord point;
friend ostream& operator<<(ostream& out, const Vector2D& vector) {
return out << '(' << vector.point.x << ", " << vector.point.y << ')';
}
};
int main() {
Coord a{ 3, 4 };
Coord b{ 5, 6 };
Vector2D va{ a };
Vector2D vb{ b };
const auto vab = va.add(vb);
cout << va << " + " << vb << " = " << vab << '\n';
cout << "distance: " << vab.distance() << '\n';
} Проще говоря происходит присвоение данным структуры принимающей и передающей путём сложения полей х и у. То есть &other это адрес передаваемой структуры, а .х и .у это доступ к полям передаваемой структуры структуры, которые складываются с соответствующими полями основной принимающей структуры и возвращается уже "сложенная" версия )))
По-русски написанное означает, что у Вас объявлен прототип функции "оператор сложения", которая возвращает результат типа "vr", в которую приходит параметр other как адресная ссылка (&) на переменную типа ""vr", которую для понимания процесса программист назвал "other" - "другой".
как работает функция я понимаю, но не понимаю. условно говоря я задам other значение, оно его приплюсует к "x", зачем после other ".x"