2014-03-24 1 views
1

분자와 분모의 lcm을 사용하여 두 분수의 합을 계산하고 싶습니다. 이는 결과적으로 축소 된 형태로 소수를 얻고 싶다는 것을 의미합니다. 나는 다음의 cpp 파일을 가지고있다.분수에 대한 연산자 + 오버플로 (lcm 사용)

#include <iostream> //need it for cin and cout 
#include "fraction.h" 
Fraction::Fraction() 
{ 
    num = 1; 
    den = 1; 
} 

Fraction::Fraction(int n, int d) 
{ 
    int tmp_gcd = gcd(n, d); 

    num = n/tmp_gcd; 
    den = d/tmp_gcd; 
} 

int Fraction::gcd(int a, int b) 
{ 
    int tmp_gcd = 1; 

// Implement GCD of two numbers; 

    return tmp_gcd; 
} 

int Fraction::lcm(int a, int b) 
{ 
return a * b/gcd(a, b); 

} 
Fraction operator+(const Fraction&a,const Fraction &b) 
{ 
    int c=(lcm(b.den,a.den)/b.den)*a.num+b.num*(lcm(b.den,a.den)/a.den); 
    int d=lcm(b.den,a.den); 
    Fraction result(c,d); 
    return result; 
} 

그러나이 코드에는 lcm이 정의되어 있지 않으므로이 코드는 작동하지 않습니다.

이 범위에서 lcm이 작동하는 데 필요한 키는 무엇입니까? 더 설명해 주시면 감사하겠습니다.

답변

2

lcmFraction의 구성원입니다. 너는 Fraction의 회원 안에 lcm으로 다만 그것을 참조 할 수 있는다; 그러나 operator+은 (는) 회원이 아니므로 Fraction::lcm의 정규화 된 이름을 사용해야합니다. 또한 static이어야합니다. (잘하면 이미 있지만, 나는 확실하게 선언을 볼 수 없다).

+0

'lcm'은 아마도'class Fraction '의 공용 인터페이스의 일부가 아니지만 네임 스페이스 범위에서 도우미 함수로 구현 파일로 이동할 수 있습니다. 'gcd '도. –

+0

고마워요! 또 다른 빠른 질문. 내부 연결이 설정되어야하기 때문에 정적으로 선언됩니까? –

+0

@ user3501 : 아니요, 멤버 함수'static '은 어떤 객체와도 독립적으로 클래스 자체와 관련이 있음을 의미합니다. 정적이지 않은 경우 객체에 호출해야합니다. 'something.lcm (a, b)', 어떤 의미가 없습니다. 벤 보이트 (Ben Voigt)가 말했듯이, 회원이되지 않는 것이 더 합리적 일 수 있습니다. 그러나 그것이 그렇다면, 정적 일 필요가 있습니다. –