我有一個簡單的對象,類型爲「ObjectX」,用一個簡單的方法稱爲「doSomething()」。我想讓其他ObjectX的東西只能訪問。換句話說,如果靜態的東西或者不是「ObjectX」類型的對象試圖調用doSomething的東西,它將不能。但是,如果ObjectX類型的對象試圖調用該方法,它將能夠。C++特殊方法的可見性
這不同於私有方法,因爲私有方法只能從它所在的同一對象中調用。如果有另一個相同類型的對象在不同的對象上調用該方法,它將被鎖定出。
我有一個簡單的對象,類型爲「ObjectX」,用一個簡單的方法稱爲「doSomething()」。我想讓其他ObjectX的東西只能訪問。換句話說,如果靜態的東西或者不是「ObjectX」類型的對象試圖調用doSomething的東西,它將不能。但是,如果ObjectX類型的對象試圖調用該方法,它將能夠。C++特殊方法的可見性
這不同於私有方法,因爲私有方法只能從它所在的同一對象中調用。如果有另一個相同類型的對象在不同的對象上調用該方法,它將被鎖定出。
private
幾乎正是你想要的。只有相同類型的對象可以使用private
方法,其他對象可以在其他對象上調用這些函數(即,private
函數不限於調用對象)。
唯一不是你所描述的是,static
函數在同一類中也可以使用private
函數。沒有任何語言功能可讓您將功能限制爲僅限物件(不包括static
功能)。
當你說靜態方法可以訪問它......這是否意味着所有的靜態方法都可以訪問它,或者是否僅限於靜態方法類? –
@GeorgesOatesLarsen靜態函數在同一個類中。 –
啊哈!謝謝!我會在九分鐘內接受你的回答 –
我不知道你在哪裏得到你的事實。一個私有函數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;
}
在C++
Class A{
A a;
doSomething(){
a.doSomething();
}
}
上面的代碼將work.And這是原因複製構造工作。
Class B{
A a;
doSomethingElse(){
a.doSomething();
}
}
以上不會反正工作。
如果你想提供訪問到B,以及由A級
沒有指定
friend B;
使B的一個朋友,一個私有方法不限於從同一個對象被調用。同一類型的另一個對象_can_使用它,它不會被鎖定。 –@Seth哦,真的嗎?那我的錯誤!你應該寫這個答案,我會很樂意接受:) –