class A {
public:
void operator=(const B &in);
private:
int a;
};
class B {
private:
int c;
}
ごめん。エラーが発生しました。代入演算子は有効ですか?またはこれを達成する方法はありますか?【AクラスとBクラスの関係はありません。】
void A::operator=(const B& in)
{
a = in.c;
}
どうもありがとう。
class A {
public:
void operator=(const B &in);
private:
int a;
};
class B {
private:
int c;
}
ごめん。エラーが発生しました。代入演算子は有効ですか?またはこれを達成する方法はありますか?【AクラスとBクラスの関係はありません。】
void A::operator=(const B& in)
{
a = in.c;
}
どうもありがとう。
はい、できます。
#include <iostream>
using namespace std;
class B {
public:
B() : y(1) {}
int getY() const { return y; }
private:
int y;
};
class A {
public:
A() : x(0) {}
void operator=(const B &in) {
x = in.getY();
}
void display() { cout << x << endl; }
private:
int x;
};
int main() {
A a;
B b;
a = b;
a.display();
}
これは答えではありませんが、代入演算子の一般的なイディオムは、オブジェクトタイプへの参照(voidではなく)を返し、最後に(* this)を返すことであることに注意してください。このようにして、a = b = cのように、譲受人を連鎖させることができます。
A& operator=(const A& other)
{
// manage any deep copy issues here
return *this;
}
代入演算子とパラメーター化されたコンストラクターはどちらも、任意の型のパラメーターを持つことができ、これらのパラメーターの値を任意の方法で使用してオブジェクトを初期化できます。
他の人がこれについて手がかりを得ていますが、私は実際にそれを述べます。はい、さまざまな型を使用できますが、friend を使用しない限り、クラスは演算子で渡されるクラスのプライベート メンバーにアクセスできないことに注意してください。
つまり、プライベートであるため、A は B::c にアクセスできません。