我有A類,它必須實現一些功能。由於實現它們中的一個需要它自己的數據結構,我假設A包含另一個B類,它具有所有需要的數據結構和功能。但是,B也需要使用A的數據結構和功能。我使用了兩個使用前向聲明調用對方的類。但仍然存在問題。例如,我需要使A中的所有數據結構公開,以便B可以訪問它。我嘗試使用朋友類,但是當我將B聲明爲具有實現B的功能的子類的抽象類時,我需要將A的所有數據結構作爲公共的。因爲朋友類不適用於繼承的子類,所以A的所有數據結構都需要公開。這使得我的設計相當混亂。前向聲明的替代方法:兩個相互使用的類
class B;
class A{
protected:
int ds[100];
B * b;
public:
a_func(){
b->b_func();
}
};
class A;
class B{
A * a;
public:
b_func(){
a->a_func();
}
};
class sub_B:public B{
public:
b_func(){
a->a_func();
a->ds ...;
}
}
我的問題是:沒有任何替代設計?
我也試圖使一個抽象類和B類實現它的功能,但是,它並沒有在概念上是有意義的建立B的對象,當我想A.
的對象
爲什麼你需要一個替代品?只需移動實現(函數定義)來分離翻譯單元('.cpp'文件)。 –
它在不同的單位。一切都是分開的。但是,使公共的每個數據結構都不是一個好的設計。它看起來並不像A包含B,而B是更小的單元,位於A. – Nargesoo
改爲使用純粹的抽象接口。他們不一定需要公開曝光。可能是這個幫助:[我如何刪除/重構«朋友»依賴聲明正確?](http://stackoverflow.com/questions/27492132/how-can-i-remove-refactor-a-friend-dependency-聲明 - 正確) –