2009-04-08 1 views
4
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; 

} 

どうもありがとうございました。

+0

これは++ – MahlerFive

+0

申し訳ありませんcをタグ付けする必要があります。エラーが発生しました。 は代入演算子が有効ですか? これを達成する方法はありますか? [AクラスとBクラスの間には関係ありません] void A :: operator =(const B&in){ a = in.c; } ありがとうございます。 –

+0

タグが修正されました。 – mouviciel

答えて

8

はい、可能です。

#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(); 
} 
+0

また、getY()をconstメンバー関数として作成し、const_castを回避することもできます。 – Naveen

+0

はい、getY constを作成し、constをキャストしないでください。 –

+0

真...戻ってそれを変更するのはちょっと怠惰でした:) – Shree

1

代入演算子とパラメータ化コンストラクタの両方が任意の型のパラメータを持っており、これらのパラメータの値に、彼らはオブジェクトを初期化したい任意の方法を使用することができます。

0

他にもこのようなことがありますが、実際はそれを述べます。はい、さまざまなタイプを使用できますが、friendを使用しない限り、クラスは演算子で渡されているクラスのプライベートメンバーにアクセスできません。

意味Aはプライベートであるため、B :: cにアクセスすることはできません。

1

これは答えではありませんが、代入演算子の一般的なイディオムは、オブジェクトタイプ(voidではなく)への参照を返し、最後に(* this)を返すことです。このように、あなたは、a = b = cののように、assignentをチェーンすることができます

A& operator=(const A& other) 
{ 
    // manage any deep copy issues here 
    return *this; 
} 
関連する問題