2011-09-28 49 views
1

我想對一些不同類型的任務使用兩個類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; i f你沒有獲得者並需要訪問B::n

2

你需要使用一個向前聲明:

class A; 

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

不一定好,還要考慮這個想法不覆蓋分配,但是提供轉換。

你可以這樣做

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

如果你這樣做a=b;它會隱成爲a=A(b)如果你這樣做b=a;將成爲隱式b=a.operator B();

這好比說,B可以被「提升」至A和A「降級」到B. 但是你可以做所有的A,而不是修改B.