2012-04-24 2 views
-2

나는이 수업 구성 :클래스간에 변수를 교환하는 올바른 방법은 무엇입니까?

class Config 
{ 
    public: 
     Config(); 
     ~Config(); 
     void Read(); 
     CData var; //CData - some config structure 
}; 

다른 클래스에서 값에 액세스 할 수있는 올바른 방법은 무엇입니까? 몇 가지 옵션이 있습니다

  1. 가 다른 클래스
  2. 당신의 변형 내 시스템에서

, config.var.some이 수업의 90 %에 필요에 그것을 글로벌

  • 전송 참조하십시오.

  • +1

    가능한 복제본 [구성 설정 문제에 적용 할 수있는 디자인 패턴은 무엇입니까?] (http://stackoverflow.com/questions/1314730/which-design-patterns-can-be-applied-to-the-configuration -settings-problem) – Johnsyweb

    답변

    3

    3) 기본적으로 전역 화하는 것과 같은 통계를 사용할 수 있습니다.

    이 경우에는 var 자체를 전역으로 설정하는 것이 가장 좋습니다.

    1

    세 번째 방법은 Config 클래스에 접근 자 함수를 추가하는 것입니다.

    class Config 
    { 
        public: 
         Config(); 
         ~Config(); 
         void Read(); 
         int getNumberOfFooBars() const { return var.foo_bars; } 
    private: 
         CData var; //CData - some config structure 
    }; 
    
    +0

    나는 그가 하나의'Config' 싱글 톤을 원한다고 생각한다. –

    +0

    아, 그래. 그런 다음 전역 화 (또는 QApplication과 같은 다른 글로벌 싱글 톤 인스턴스의 구성원으로 만드는 것과 같은 방법)에 투표합니다. – jpalecek

    +0

    이해가 안됩니다. 예를 들어 main()에서 Config.Read() - 구성 파일을 구문 분석합니다. 어떤 수업에서 다음에 내가 너에게 제안을 어떻게하면 좋을까? – askovpen

    1

    일반적으로 게으르지 않고 글로벌하게 만들기보다는 참조로이 객체를 전달합니다. 객체를 전달하면 생성자/멤버 초기화 프로그램 목록을보고 어떤 클래스가 객체를 사용할 것인지 명확히 알 수 있습니다. 반대로 전역을 (싱글 톤 또는 기타로) 글로벌하게 만드는 것은 여러분이나 다른 사람들이 어떤 클래스가 객체를 한 눈에 필요로 하는지를 알기 어렵게 만듭니다.

    다른 개체가 정의 된 인터페이스를 통해 해당 멤버에 액세스 할 수있게하는 접근 자 기능을 구성 클래스에 추가합니다. 이렇게하면 config 클래스와 인터페이스하는 코드를 위반하지 않고 클래스의 내부를 변경할 수 있습니다.

    관련 문제