2014-02-23 5 views
0

Class BClass A에서 멤버 함수를 호출 할 수있게하고 싶습니다. 이것을 접근하는 가장 좋은 방법은 무엇입니까?다른 클래스의 멤버 함수 호출하기 C++

어떤 상황, 여기 내 코드의 축약 버전의 조각입니다

class Time{ 
     public: 
     Time(); 
     Time(int hour, int minute); 
     int time_GetHour() const; 
     ----- 
     private: 
     int hour; 
     int minute; 
    }; 

    int Time::time_GetHour() const{ 
     return hour; 
    } 


    class DaTime{ 
     public: 
     DaTime(); 
     DaTime(Day day, Time start, Time end); 
     dt_Difference(DaTime &a, DaTime &b) const; 

     private: 
     int duration; 
     Time start; 
     Time end; 
    }; 

    int DaTime::dt_Difference(DaTime &a, DaTime &b) const{ 
     int diff_hour = 0; 
     int diff_min = 0; 
     int diff = 0; 

     if(dt_LessThanOrEqual(a,b)){ 
      diff_hour = (b.time_GetHour() - a.time_GetHour())*60; 
      diff_min = b.time_GetHour() - a.time_GetHour(); 
      diff = diff_hour + diff_min; 
      return diff; 
     } 
    } 

나는 내 수업 DaTime가 나는 것을 볼 수있는 멤버 time_GetHour()을가 없다고 주장한다 점점 오전 오류입니다. 수정 프로그램에 접근하거나이 오류를 우회하는 가장 좋은 방법은 무엇입니까? 감사. 당신은 단순히 당신이 언급 한 멤버 변수에 액세스하여 문제를 해결할 수있다, 당신이 그것을 상속의 내부 대신 Time 클래스를 사용하려면 명확으로

+0

그것은'DaTime'이 기능을 확장 할 수 또는 내부적으로'Time'를 사용하도록되어 무엇에 따라 달라집니다. 답변을 보려면 [여기] (http://stackoverflow.com/q/21692193/1387612)를 참조하십시오. – janisz

+0

시간 _ 무엇을 원하십니까? 그리고 왜 메소드 이름 앞에'stuff_'을 넣고 있습니까? – Sneftel

+0

'time_GetHour'는'Time' 클래스의 인스턴스화에서 이미 존재하는'hour'를 반환하기를 원합니다. –

답변

3

: 나는 일치 확실하지 않다 그러나

diff_hour = (b.end.time_GetHour() - a.start.time_GetHour())*60; 

당신의 위의 표본과 수학에 필요한 시간.

알아 두 개의 피연산자 연산 샘플은 정적 클래스 함수 또는 전역 연산자 정의 IMHO 여야합니다.

+0

아, 네. 클래스를 대문자로 사용하는 것은 실수였습니다. 도와 줘서 고마워. 그걸 줄께. –

+0

@AllenS이 (가) 내 업데이트를 참조하십시오 ... –

+0

Thanks. 그게 효과가 있었어! 내가 올바르게 이해한다면, 올바른 멤버 변수를주지 않고 직접 함수에 액세스하려고했기 때문입니다. 고맙습니다. –

0

분을 반환하려면 Time에 함수가 필요합니다. 다음은 수정 된 Time입니다.

class Time 
{ 
    public: 
     Time(); 
     Time(int hour, int minute); 
     int time_GetHour() const; 
     int time_GetMinute() const; 
    private: 
     int hour; 
     int minute; 
}; 

int Time::time_GetHour() const 
{ 
    return hour; 
} 

int Time::time_GetMinute() const 
{ 
    return minute; 
} 

귀하의 정의는 DaTime입니다. startendduration을 저장해야합니까? startend 또는 duration 중 하나를 저장하면 안되나요? 입력 Day dayDaTime의 건설 목적으로 어떤 용도로 사용됩니까? 이미 duration를 계산 한 경우

, DaTime::dt_Difference 대신 Time의 멤버 함수에 의존 duration를 사용하는 약간 변경 될 수 있습니다.

int DaTime::dt_Difference(DaTime &a, DaTime &b) const 
{ 
    int diff = 0; 

    if(dt_LessThanOrEqual(a,b)) 
    { 
     diff = b.duration - a.duration; 
    } 
    return diff; 
} 

그러나 DaTime::dt_Difference decalred 한 방법은, 사용하기 어색 할 것이다. dt1의 상태가 dt_Difference의 반환 값에 영향을주지 않습니다 것을

DaTime dt1; 
DaTime dt2; 
DaTime dt3; 
int difference = dt1.dt_Difference(dt2, dt3); 

공지 사항 : 당신은 같은 라인을 가지고해야합니다. 이것을 사용하는 방법은 무엇입니까? 더 좋은 대안이 될 dt_Difference의 선언을 변경하는 것입니다 : 다음

int dt_Difference(const DaTime &a) const; 

, 구현으로 변경 될 것입니다 :

:

다음
int DaTime::dt_Difference(const DaTime &a) const 
{ 
    int diff = 0; 

    if(dt_LessThanOrEqual(*this,a)) 
    { 
     diff = b.duration - this->duration; 
    } 
    return diff; 
} 

, 사용량은 변경 될 수 있습니다

DaTime dt1; 
DaTime dt2; 
int difference = dt1.dt_Difference(dt2); 

또한 이름이 time_GetHourtime_GetMinute 일 필요가 없습니다. time은 클래스 Time을 다루기 때문에 중복됩니다. 그들을 getHourgetSecond으로 변경할 수 있습니다. 마찬가지로 dt_Differenceoperator-으로 변경할 수도 있습니다.if(dt_LessThanOrEqual(*this, a))의 사용을 if (*this <= a)으로 바꿀 수도 있습니다. 두 번째 형식은 첫 번째 형식보다 읽기 쉽습니다. 요약

이 코드는 다음과 같이 변경 될 수 있습니다 :

class Time 
{ 
    public: 
     Time(); 
     Time(int hour, int minute); 
     int getHour() const; 
     int getMinute() const; 
    private: 
     int hour; 
     int minute; 
}; 

int Time::getHour() const 
{ 
    return hour; 
} 

int Time::getMinute() const 
{ 
    return minute; 
} 

class DaTime 
{ 
    public: 
     DaTime(); 
     DaTime(Day day, Time start, Time end); 
     int operator-(const DaTime &a) const; 
     bool operator<=(const DaTime& rhs) const; 

    private: 
     int duration; 
}; 

int DaTime::operator-(const DaTime &a) const 
{ 
    int diff = 0; 

    if(a <= *this) 
    { 
     diff = this->duration - a.duration; 
    } 
    return diff; 
} 

DaTime dt1; 
DaTime dt2; 
int difference = dt2 - dt1; 
+0

TL; DR; 이런 종류의 세부 사항은 OP의 (기본) 질문에 대답하는 데 필요하지는 않습니다 ... –

관련 문제