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;
}
4

2 に答える 2

2

簡単な方法で行います: publica を使用し、structアクセス指定子を除外して、すべてのメンバーを作成します。とにかく完全なアクセスを提供する場合、データの隠蔽は意味がありません。

また、すべてのメンバーを一度に割り当てることができるため、すべてのカスタム コンストラクターを除外できます。

于 2014-04-06T21:56:33.480 に答える
1

クラスに get メソッドと set メソッドを追加するだけです

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

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

GetY()との同様の関数SetY(double y)。これにより、必要なときに必要な値にアクセスして設定することができますxy

または、これらのメンバーのアクセス指定子を のpublic代わりに変更するだけですprivate

また、クラスには、あるインスタンスを別のoperator=()インスタンスに割り当てるとメンバーごとにメンバーをコピーするデフォルトがあることに注意してください。Cartesian

したがって、あなたが持っている場合

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

あなたは単に割り当てることがpoint1できpoint2ます

 point2 = point1;
于 2014-04-06T21:57:10.060 に答える