2013-04-22 68 views
1
Struct S 
{int a,b,c}; 

class A{ 
    S myArray[MAX] 
    void fillArrayFromFile(); 
}; 

class B{ 
    void printStyle1(); 
    void printStyle2(); 
    void printSTyle3(); 
}; 

class C{ 
    void printStyle4(); 
    void printStyle5(); 
    void printSTyle6(); 
}; 

所以給出的假裝代碼有點...如何訪問私有陣列中的類C++

我想B級和C可以不受讀取來自於A級的陣列信息能夠改變數據。

存取函數是非常麻煩的,因爲我會寫一個函數爲每個不同的輸出格式或者創建一個臨時結構來保存數據,並把它傳遞給調用類,因此它可以。這似乎不是最好的解決方案。

友元函數將使訪問類的成員,但不是我需要的情況下(除非我誤解友元函數...)

使得陣列公衆會允許比其他類我希望能夠訪問/操作數據。

+2

朋友類可以訪問自己的數據成員以及方法。 – phoeagon 2013-04-22 02:34:54

回答

2

如果要允許客戶端來檢查你可以用一個成員函數A做到這一點的數組的內容的能力。

class A 
{ 
    S myArray[MAX] 
    void fillArrayFromFile(); 
public: 
    const S* getArrayPointer() const { return &myArray; } 
}; 

這與允許他們直接進行只讀訪問的效果相同。

+0

雖然仍然容易受到'const <*>'的影響。 (不過,我覺得沒有什麼可以阻止這種不進行復制) – phoeagon 2013-04-22 02:36:01

+0

@phoeagon'const_cast'在這裏無關緊要。你無法阻止某人使用它。 – 2013-04-22 02:48:56

+0

@CaptainObvlious格式化沒有任何意義,我...我看到一個S指針的回報,但什麼是常量做的{}之外的定義是什麼? – 2013-04-22 02:51:09

2

添加的接入功能的返回一個const指針或引用到陣列,或到指定的元件在S.

const S* getArray() const { return myArray; } 
const S& getElement(size_t ele) const { return myArray[ele]; }