2012-01-24 4 views
1

"doSomething()"이라는 간단한 메서드를 사용하여 "ObjectX"형식의 간단한 개체를 만들었습니다. 나는 doSomething을 다른 ObjectX에 의해서만 접근 가능하게하고 싶습니다. 즉, 정적 인 객체 또는 "ObjectX"유형의 객체가 아닌 객체가 doSomething을 호출하려고하면이를 수행 할 수 없습니다. 그러나 ObjectX 유형의 객체가 메소드를 호출하려고하면 가능합니다.C++ 특수 메서드 가시성

개인용 메서드와 다른 점은 private 메서드는 해당 개체와 동일한 개체에서만 호출 할 수 있다는 점입니다. 다른 개체에 해당 메서드를 호출하는 같은 형식의 개체가 잠겨 있으면 아웃.

+4

없음에 friend B;을 지정하여 B의 친구를 만들기 위해 액세스를 제공하려면

은 개인 방법은 동일한 개체에서 호출되는 한정되는 것은 아니다. 같은 유형의 또 다른 객체는 그것을 사용할 수 있지만 잠겨 있지 않습니다. –

+0

@Seth Ooh, 정말요? 내 실수! 당신은 대답으로, 나는 받아 들여서 기쁠 것이다 :) –

답변

4

private 거의 정확히 원하는대로 수행합니다. 동일한 유형의 객체 만 private 메소드를 사용할 수 있으며 다른 객체는 다른 객체의 해당 함수를 호출 할 수 있습니다 (즉, private 함수는 호출 객체로 제한되지 않습니다).

당신이 설명했던 것과 다른 유일한 점은 같은 클래스의 static 기능도 private 기능을 사용할 수 있다는 것입니다. 기능을 객체로만 제한 할 수있는 언어 기능은 없습니다 (static 기능 제외).

+0

정적 메서드가 그것을 액세스 할 수 있다고 말하면 ... 이것은 모든 정적 메서드가 그것을 액세스 할 수 있다는 것을 의미합니까, 아니면 동일한 정적 메서드로 제한되어 있습니까? 수업? –

+0

@GeorgesOatesLarsen 동일한 클래스의 정적 함수. –

+0

아아! 고맙습니다! 9 분 안에 너의 대답을 받아 들일거야. –

2

귀하의 사실을 어디에서 알 수 있습니까? 개인 기능 A::fooA 유형의 모든 오브젝트에서 호출 할 수 있습니다. 그것 자체에 또는 다른 경우에 있으십시오.

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(); 
    } 
} 

에서 위의 코드는이 이유 복사 생성자의 작품이다 노고 것이다.

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

위의 사항은 어쨌든 작동하지 않습니다. 당신은뿐만 아니라 B ​​클래스 A.