2011-12-17 108 views
4

在此代碼中,爲什麼我可以訪問沒有編譯器錯誤的對象的私有成員?訪問私有成員C++

class Cents 
{ 
private: 
    int m_nCents; 
public: 
    Cents(int nCents=0) 
    { 
     m_nCents = nCents; 
    } 

    // Copy constructor 
    Cents(const Cents &cSource) 
    { 
     m_nCents = cSource.m_nCents; 
    } 

    Cents& operator= (const Cents &cSource); 

}; 

Cents& Cents::operator= (const Cents &cSource) 
{ 

cSource.m_nCents是私人我爲什麼能做到以下幾點:

m_nCents = cSource.m_nCents; 

    // return the existing object 
    return *this; 
} 
+5

如果它像Java一樣,那是因爲同一類的實例可以毫無問題地訪問其他實例的字段。字段對於類是私有的,而不是實例。 – fge 2011-12-17 19:59:50

+1

你對面向對象的範例很陌生嗎? – Lion 2011-12-17 20:00:55

+1

如果一個類不能訪問自己的私有成員變量,誰可以? – 2011-12-17 20:08:52

回答

9

因爲private手段 「可見訪問類」,而不是 「可見訪問對象」。

+2

可見性是一回事,可訪問性是另一回事。即使在課外,私人成員也可以看到非成員職能,但他們無法訪問。 – Nawaz 2011-12-17 20:00:58

4

您可以從該成員的成員函數/構造函數/析構函數/ freind中訪問私有成員。它是基於類的可訪問性,而不是基於對象的可訪問性。