2012-11-01 3 views
-1

나는 이것을 올바르게 시도 할 것입니다. 필요한 경우 설명을 요청하십시오.클래스간에 정보 전달

ifstream을 사용하여 파일을 열고 파일에서 데이터를 읽는 메소드가있는 클래스가 있습니다 (클래스 a라고합니다). 나는 또 다른 반 (우리는 그것을 반 b라고 부를 것이다)을 가지고있다. 그 정보를 클래스 A에서 가져 와서 클래스 B로 전달해야합니다. 이 작업을 수행하는 방법은 클래스 b에서 호출됩니다. 나는 친구 기능을 선언 또는

  • 그냥 유형으로 클래스 A와 클래스 B의 VAR를 선언하고 a.function를 사용하여 기능을 실행
  • b를 A->에서 내가 할 수

    1. 선언 상속을 생각했다.

    그러나 결과는 항상? 클래스 A를 단독으로 실행하면 잘 작동합니다 (데이터를 읽고 데이터를 출력 함).

    클래스간에 infile.get을 사용하여 함수를 실행할 수 없습니까?

  • +1

    다소 혼란 스럽습니다. 두 가지 경우 (작동/작동하지 않음)를'code'로 보여줄 수 있습니까? – egrunin

    +0

    코드의 다른 부분 사이에서 정보를 전송할 수있는 유일한 형식 (전역 제외)은 함수에 전달되는 인수입니다. 예상대로 작동하지 않는 코드를 (예상되는 동작과 함께) 표시 할 수 있습니까? – Mankarse

    +0

    예제 사용 사례가 좋을 것입니다. 이상적으로 모든 유사 작업 (파일 열기, 처리 데이터 등)은 상호 종속성 (결합)을 낮추고 응집력을 높이기 위해 단일 클래스에 의해 수행되어야합니다. – xbonez

    답변

    0

    일반적으로 두 클래스 사이에 API가 정의되어 있어야합니다. 이 경우 API는 전송해야하는 데이터로 클래스 A에서 호출 될 것으로 예상되는 클래스 B의 메소드가 될 수 있습니다. 다음과 같은 내용이 있습니다 :

    //B header file 
    struct dataType; 
    class B 
    { 
        //... 
    public: 
        statusType passData(dataType &x); 
    }; 
    
    //A header file 
    struct dataType //shared data type between the 2 classes 
    { 
        //internal structure of your data 
    }; 
    
    class A 
    { 
        B *objB; //link to B instance (the receiver) 
        statusType acquireData(); 
    }; 
    
    //cpp file 
    #include "A.h" 
    #include "B.h" 
    statusType B::passData(dataType &x) 
    { 
        //do whatever you need with the data 
    } 
    
    statusType A::acquireData() 
    { 
        //do your reading from file here into x 
        objB.passData(x); 
    } 
    

    이 예제는 A와 B 클래스 간의 간단한 인터페이스 생성을 보여줍니다. 상속 또는 구성과 같은 다른 더 긴밀한 관계도 가능하지만 실제로는 요구 사항에 따라 달라지며 명시한 것보다 더 강력한 관계를 암시합니다. 그렇지 않으면 (작동하더라도) 설계 상 결함이됩니다.

    관련 문제