Top.Mail.Ru
Ответы

С++ что значит other.x или other.y, как работает функционал и зачем там точка? вывод по факту того же other но без .x

123456789
 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 объявленный в начале класса?

Аватар пользователя
Искусственный интеллект
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
 #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"



Видео по теме