Дочернее назначение декартовых классов Переполнение стека

У меня есть код для декартового класса, и теперь я хочу добавить членское присваивание, чтобы установить значения от скоординированного до скоординированного. Я не совсем уверен, как это сделать. Каков синтаксис написания членского присваивания для объектов класса? Буду ли я вносить изменения в сам класс или помещать их в основную функцию?

#include <iostream>
using namespace std;

class Cartesian
{
private:
double x;
double y;

public:
Cartesian( double a = 0, double b = 0) : x(a), y(b){}

friend istream& operator>>(istream&, Cartesian&);
friend ostream& operator<<(ostream&, const Cartesian&);
};

istream& operator>>(istream& in, Cartesian& num)
{
cin >> num.x >> num.y;
return in;
}

ostream& operator<<( ostream& out, const Cartesian& num)
{
cout << "(" << num.x << ", " << num.y << ")" << endl;
return out;
}

int main()
{
Cartesian   coord1, coord2;

cout << "Please enter the first coordinates in the form x y" << endl;
cin >> coord1;

cout << "Please enter the second coordinates in the form x y" << endl;
cin >> coord2;

cout << coord1;
cout << coord2;

return 0;
}

0

Решение

Сделайте это простым способом: сделайте всех участников publicс помощью struct и опуская спецификаторы доступа. Скрытие данных не имеет смысла, если вы предоставляете полный доступ в любом случае.

Кроме того, вы можете опустить все пользовательские конструкторы, так как вы можете назначить все элементы сразу без.

2

Другие решения

Просто добавьте методы get и set в ваш класс

void Cartesian::SetX(double new_x)
{
x = new_x;
}

а также

double Cartesian::GetX()
{
return x;
}

и аналогичные функции для GetY() а также SetY(double y), Это позволит вам получить доступ и установить значения x а также y к тому, что вы хотите, как и когда вам нужно.

В качестве альтернативы просто измените спецификатор доступа для этих членов на public вместо private,

Также имейте в виду, что у вашего класса есть значение по умолчанию operator=() который будет копировать элементы для каждого члена, если вы назначите один экземпляр Cartesian другому.

Таким образом, если у вас есть

 Cartesian point1(1.0,2.0);
Cartesian point2(4.5,4.3);

Вы можете просто назначить point1 в point2 от

 point2 = point1;
1