2016-02-10 91 views
0

我有兩個類A和B應該都使用類A被創建的類B的指針的第三類P的兩個指針和兩個指針作爲參數傳遞(這裏是我不知道如何的問題)。還有B,其應換指針也A. 我不知道該怎麼A的指針傳遞到B,以交換他們在這兩個班的內部交換()函數(A,B)。 他們必須在全球範圍內定義嗎?或者是否可以傳遞地址並交換這些地址?交換指針

Class B: 
{ 
public: 
    B(P *p1, P *p2) 
    { 
     mB_p1 = p1; 
     mB_p2 = p2; 
    }; 

private: 
    P *mB_p1; 
    P *mB_p2; 

    void swapPointers(); 
} 


Class A: 
{ 
public: 
    A() 
    { 
     mA_p1 = new P(); 
     mA_p2 = new P(); 
     a = new B(mA_p1, mA_p2); 
    }; 

    B *b; 

private: 
    P *mA_p1; 
    P *mA_p2; 
} 


B::swapPointers() 
{ 
    P *temp; 
    temp = mB_p1; 
    mB_p1 = mB_p2; 
    mB_p2 = mB_p1; 
} 

據我知道的是,我有兩個班,現在每兩個指針。當我用B的交換函數交換它們時,A中的指針沒有任何反應,這是我想改變的。雖然我不知道什麼是正確的方式。

+0

雖然整體思路看起來很危險,你會傳遞到不指針爲P,而是指向A的領域mA_p (也爲P **),然後進行交換。但是,這又會與OOP的基本原理之一相矛盾:數據封裝 – user3159253

+0

我想我會再次重新設計我的設計...... – evolved

回答

1

這不是一個很好的設計,我不知道爲什麼這是必要的程序。在任何情況下,你可以用引用實現這一目標,從而避免了兩個類之間的相互關係(你可以很容易地重新使用B其他零件程序太多,以創造可怕的錯誤):

class B 
{ 
public: 
    B(P * &p1, P * &p2) 
     : mB_p1(p1) 
     , mB_p2(p2) 
    { 
    } 

private: 
    P * &mB_p1; 
    P * &mB_p2; 

    void swapPointers() 
    { 
     std::swap(mB_p1, mB_p2); 
    } 
} 

現在,B商店引用指針,所以交換引用實際上將交換指針被提到的值。

順便說一句,不要忘記delete b;在析構函數爲A

1

如果B還有指向A的指針並且是A的朋友,則可以這樣做。也可以在swapPointers()函數內交換A中的指針。

順便問一下,您的交換的實現是錯誤的。

B::swapPointers() 
{ 
    P* temp = mB_p1; 
    mB_p1 = mB_p2; 
    mB_p2 = temp; 
}