8
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;

} 

どうもありがとう。

4

4 に答える 4

11

はい、できます。

#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();
}
于 2009-04-08T08:17:27.310 に答える
2

これは答えではありませんが、代入演算子の一般的なイディオムは、オブジェクトタイプへの参照(voidではなく)を返し、最後に(* this)を返すことであることに注意してください。このようにして、a = b = cのように、譲受人を連鎖させることができます。

A& operator=(const A& other) 
{
    // manage any deep copy issues here
    return *this;
}
于 2012-11-21T15:25:22.237 に答える
1

代入演算子とパラメーター化されたコンストラクターはどちらも、任意の型のパラメーターを持つことができ、これらのパラメーターの値を任意の方法で使用してオブジェクトを初期化できます。

于 2009-04-08T08:18:17.810 に答える
0

他の人がこれについて手がかりを得ていますが、私は実際にそれを述べます。はい、さまざまな型を使用できますが、friend を使用しない限り、クラスは演算子で渡されるクラスのプライベート メンバーにアクセスできないことに注意してください。

つまり、プライベートであるため、A は B::c にアクセスできません。

于 2011-05-12T21:00:31.453 に答える