2011-09-28 10 views
1

いくつかの異なるタイプのタスクに2つのクラスABを使用したいと思います。しかし、私は両方で似ている必要がありますいくつかのデータを交換したい、私はA = Bを使用したいと思います。オーバーロード演算子=クラス間でデータを交換する

このように、ヘッダーファイルに双方向を含めることを避けて、これを使用する方法は?

例:class_a.hで :

#include class_b.h 
class A { 
    private: 
    int i; 
    public: 
    A& operator=(B& const b); 
} 

class_b.h:

#include class_a.h // won't work here ... 
class B { 
    private: 
    unsigned long n; 
    public: 
    B& operator=(A& const a); 
} 
+0

なぜ異なるヘッダーファイルにする必要がありますか? – mkb

答えて

4

あなたは将来を宣言する必要があり、他のクラスを:

class B; 
class A { 
    private: 
    int i; 
    public: 
    A& operator=(B& const b); 
} 

はまた、あなたに注意おそらくAの定義内にfriend class B;を宣言する必要がありますあなたはゲッターを持っておらず、B::nにアクセスする必要があります。必ずしも

class A; 

class B { 
    private: 
    unsigned long n; 
    public: 
    B& operator=(A& const a); 
} 
2

あなたは前方宣言を使用する必要があります。

あなたはa=b;を行う場合は、暗黙的にa=A(b)になり、あなたがしなければb=a;は暗黙のうちにb=a.operator B();

これはBが「昇格」することができますというようなものであるになります

#include "b.h" 
class A 
{ 
public: 
    A(const B&); 
    operator B() const; 
}; 

のように行うことができますAはBに「降格」されます。 しかし、Bを変更するのではなく、Aの周りすべてで行うことができます。

0

ない方が良いが、割り当てを上書きしないこともアイデアを検討したが、変換を提供します。

関連する問題