2017-11-26 3 views
-1

다른 클래스의 클래스 인스턴스를 얻고 싶습니다.다른 클래스의 속성과 동일한 클래스 인스턴스 얻기

나는 A 클래스가 개인 회원으로 B 개체를 갖는 다음과 같은 클래스가 있습니다.

class A 
{ 
    private: 
     B my_B; 

    public: 
     B getBInstance (void) 
     { 
     return this->my_B; 
     } 
} 

class B 
{ 
    private: 
     int my_attr; 

    public: 
     B() 
     { 
     this -> my_attr = 0; //Initial value for my_attr 
     }   

     void setMyAttr (int attr) 
     { 
     this->my_attr = attr; 
     } 

     int getMyAttr (void) 
     { 
     return this->my_attr; 
     } 
} 

나는 my_B 클래스 A에서 인스턴스화 된 객체에 독점되고 싶어요.

다음을 수행 할 때마다 인스턴스에 액세스 할 때마다 A::getBInstance()을 호출하기 때문에 my_attr의 내용을 변경할 수 없습니다. 대답은 그리 명확 경우

A new_A; 
new_B = new_A.getBInstance(); 
new_B.setMyAttr (50); 
printf ("%d\n", newB.getMyAttr()); //Prints 50 

내가 사과 : 다음과 같은 처리를 할 경우

A new_A; 
new_A.getBInstance().setMyAttr(50); 
printf ("%d\n", new_A.getBInstance().getMyAttr()); //Prints 0 

하지만, 나는 올바른 출력을 얻을. 정적이거나 싱글 톤 패턴을 만드는 것에 대한 노력이 도움이 될지도 모르겠지만, 이런 종류의 구현에 익숙하지 않기 때문에 몇 가지 지침이 필요합니다. 사전에

덕분에,

+0

"독점권"이란 무엇을 의미합니까? 그리고 이것은 싱글 톤과 어떤 관련이 있습니까? – StoryTeller

+0

문제는 예제로 설명됩니다. private 멤버 클래스에 액세스하는 두 가지 방법은 다른 결과를 제공합니다. 두 가지 방법으로 올바른 결과를 얻을 수 있기를 바랍니다. 싱글 톤은 하나의 인스턴스를 가진 클래스이기 때문에, 나는 확신 할 수는 없지만, 그 방향으로의 구현이 도움이 될 것이라고 생각했다. – mozcelikors

+2

당신은'my_B' 사본을 돌려줍니다. 'A'에 저장된 값을 변경하려면 참조를 반환하십시오. – 1201ProgramAlarm

답변

1

당신은 my_B의 사본을 반환하고 있습니다. A에 저장된 것을 변경하려면 참조 번호를 반환하십시오.

B &getBInstance (void) 
{ 
    return this->my_B; 
} 
관련 문제