2013-08-06 2 views
1

class AI 클래스가 있습니다. 그리고이 수업에서 나는 class AIbrain이라는 또 다른 하위 클래스를 만들었습니다. 이제 각각의 개별 AI 개체가 자신의 AIbrain을 조작 할 수 있기를 바랍니다. 그러나 내가 class AIbrain{friend AI;};이라면 Aibrain 클래스는 AI 클래스의 모든 객체에 노출 될 것입니다.C++ : 친구 특정 개체 (중첩 클래스)

AIbrainAI 개체를 사용하는 방법이 궁금합니다. 그렇지 않으면 각 AI은 다른 AI의 변수를 수정하고 그 기능에 액세스 할 수 있습니다.

답변

3

는 내가 제대로 이해를 바랍니다 :

class AI 
{ 
    class AIbrain 
    { 
    } brain; 
}; 

당신은 (코드 예제는이 방법으로 무엇을 달성하고자하는 많은 명확하게) AI의 부모 인스턴스에 액세스 할 수 있도록 brain를 원한다. 이것은 당신이에 의해이 문제를 해결 할 수있는 경우라면

는 다음 AI 부모 인스턴스의 private 멤버에 액세스 할 수

class AI 
{ 
     class AIbrain 
     { 
       AI * parent_; 
       explicit AIbrain(AI * parent) : parent_(parent) {} 
     } brain; 

    public: 
     AI() : brain(this) {} 
}; 

brain 만약 필요, 당신은 여전히 ​​AI의 친구로 AIbrain를 선언해야합니다. AIbrainAI의 회원이므로 의 친구를 선언 할 필요가 없습니다. 사용자가 AIbrain을 직접 인스턴스화하지 못하도록하는 트릭입니다 (개인 생성자는 AI에만 액세스 가능).

2

정적 인 경우가 아니면 클래스의 변수 및 기능을 수정하지 말고 인스턴스의 변수 및 기능을 수정하십시오.
당신이 간단한 각 AI에를 원하는 경우 는AIBrain는, 다음 AI 회원

class AIBrain { /*...*/ }; 
class AI { 
    public: 
    //whatever 
    private: 
    AIBrain brain; 
}; 

각 AI 인스턴스를 각 AI 인스턴스를 제공 자신의 두뇌를 가지고 있으며, 뇌의 공공 회원 및 기능을 사용할 수 있습니다.