2012-01-24 38 views
1

我有一個簡單的對象,類型爲「ObjectX」,用一個簡單的方法稱爲「doSomething()」。我想讓其他ObjectX的東西只能訪問。換句話說,如果靜態的東西或者不是「ObjectX」類型的對象試圖調用doSomething的東西,它將不能。但是,如果ObjectX類型的對象試圖調用該方法,它將能夠。C++特殊方法的可見性

這不同於私有方法,因爲私有方法只能從它所在的同一對象中調用。如果有另一個相同類型的對象在不同的​​對象上調用該方法,它將被鎖定出。

+4

沒有指定friend B;使B的一個朋友,一個私有方法不限於從同一個對象被調用。同一類型的另一個對象_can_使用它,它不會被鎖定。 –

+0

@Seth哦,真的嗎?那我的錯誤!你應該寫這個答案,我會很樂意接受:) –

回答

4

private幾乎正是你想要的。只有相同類型的對象可以使用private方法,其他對象可以在其他對象上調用這些函數(即,private函數不限於調用對象)。

唯一不是你所描述的是,static函數在同一類中也可以使用private函數。沒有任何語言功能可讓您將功能限制爲僅限物件(不包括static功能)。

+0

當你說靜態方法可以訪問它......這是否意味着所有的靜態方法都可以訪問它,或者是否僅限於靜態方法類? –

+0

@GeorgesOatesLarsen靜態函數在同一個類中。 –

+0

啊哈!謝謝!我會在九分鐘內接受你的回答 –

2

我不知道你在哪裏得到你的事實。一個私有函數A::foo可以被A類型的任何對象調用。無論是在本身還是在其他情況下。

class A 
{ 
public: 
    void foo(const A& other) { other.priv(); } 

private: 
    void priv() const {} 
}; 


int main() 
{ 
    A a1, a2; 
    a1.foo(a2); 
    return 0; 
} 
0

在C++

Class A{ 
    A a; 
    doSomething(){ 
    a.doSomething(); 
    } 
} 

上面的代碼將work.And這是原因複製構造工作。

Class B{ 
    A a; 
    doSomethingElse(){ 
    a.doSomething(); 
    } 
} 

以上不會反正工作。

如果你想提供訪問到B,以及由A級