Членное присваивание декартового класса с ++

0

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

#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
    Вам нужно перегрузить оператор =. Пожалуйста, проверьте эту ветку: stackoverflow.com/questions/4421706/operator-overloading, а также ссылки, упомянутые в этой ветке. Это должно дать вам обзор.
  • 0
    @ user3493289 default (автоматически сгенерированный) operator = в этом случае достаточно ...
Показать ещё 1 комментарий
Теги:
class
cartesian
cartesian-coordinates

2 ответа

2

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

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

1

Просто добавьте методы 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=() умолчанию operator=() который будет копировать члены по порядку, если вы назначаете один экземпляр Cartesian на другой.

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

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

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

 point2 = point1;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню