I 클래스라는 분수가 : 다음 구현 파일에변환 생성자 +
#ifndef FRACTION_H
#define FRACTION_H
#include <iostream>
using namespace std;
class Fraction
{
// data
int m_iNom;
int m_iDenom;
// operations
int gcd (int i, int j);
void reduce();
public:
Fraction (int nn=0, int dn=1); // 1 declaration = 3 constructors
Fraction (const Fraction& fr); //C.Ctor
~Fraction(); //Dtor
Fraction& operator = (const Fraction &fr); //assignment
Fraction& operator ++(); // prefix - ++a
const Fraction operator ++ (int); // postfix - a++
friend const Fraction operator + (const Fraction &f1, const Fraction &f2);
friend const Fraction operator - (const Fraction &f1, const Fraction &f2);
friend const Fraction operator * (const Fraction &f1, const Fraction &f2);
friend const Fraction operator/(const Fraction &f1, const Fraction &f2);
Fraction& operator += (const Fraction &f);
operator double() { return double (m_iNom)/m_iDenom; } //casting operator
friend istream& operator >> (istream &is, Fraction &f);
friend ostream& operator << (ostream &os, const Fraction &f);
const int& operator[] (int i) const;
int& operator [] (int i);
};
#endif
:
#include "Fraction.h"
#include <iostream>
using namespace std;
Fraction::Fraction (int nn, int dd) :
m_iNom (nn), m_iDenom (dd) {
if (m_iDenom == 0)
m_iDenom = 1;
reduce();
cout<<"Ctor - Fraction: "<<m_iNom<<"/"<<m_iDenom<<endl;
}
Fraction::Fraction (const Fraction & fr){
m_iNom=fr.m_iNom;
m_iDenom=fr.m_iDenom;
cout<<"C.Ctor - Fraction: "<<m_iNom<<"/"<<m_iDenom<<endl;
}
Fraction::~Fraction() {
cout<<"del: "<<m_iNom<<"/"<<m_iDenom<<endl;
}
int Fraction::gcd (int i, int j) {
if ((i == 0) || (j == 0))
return i + j;
while (i %= j) {
int t = i;
i = j;
j = t;
}
return j;
}
void Fraction::reduce() {
int g = gcd (m_iNom, m_iDenom);
m_iNom /= g;
m_iDenom /= g;
}
const Fraction operator + (const Fraction &f1, const Fraction &f2) {
int nn = f1.m_iNom * f2.m_iDenom + f1.m_iDenom * f2.m_iNom;
int dd = f1.m_iDenom * f2.m_iDenom;
return Fraction (nn, dd);
}
const Fraction operator - (const Fraction &f1, const Fraction &f2) {
int nn = f1.m_iNom * f2.m_iDenom - f1.m_iDenom * f2.m_iNom;
int dd = f1.m_iDenom * f2.m_iDenom;
return Fraction (nn, dd);
}
const Fraction operator * (const Fraction &f1, const Fraction &f2) {
int nn = f1.m_iNom * f2.m_iNom;
int dd = f1.m_iDenom * f2.m_iDenom;
return Fraction (nn, dd);
}
const Fraction operator/(const Fraction &f1, const Fraction &f2) {
int nn = f1.m_iNom * f2.m_iDenom;
int dd = f1.m_iDenom * f2.m_iNom;
return Fraction (nn, dd);
}
Fraction& Fraction::operator = (const Fraction &f)
{
m_iNom = f.m_iNom;
m_iDenom = f.m_iDenom;
cout<<"OP = - Fraction: "<<m_iNom<<"/"<<m_iDenom<<endl;
return *this;
}
Fraction& Fraction::operator += (const Fraction &f) {
(*this) = (*this) + f;
return *this;
}
Fraction& Fraction::operator ++()
{
m_iNom += m_iDenom;
reduce();
return *this;
}
const Fraction Fraction::operator ++ (int)
{
int nn = m_iNom;
int dd = m_iDenom;
m_iNom += m_iDenom;
reduce();
return Fraction (nn, dd);
}
istream& operator >> (istream &is, Fraction &frac)
{
char divSign;
is >> frac.m_iNom >> divSign >> frac.m_iDenom;
if (frac.m_iDenom == 0)
frac.m_iDenom = 1;
frac.reduce();
return is;
}
ostream& operator << (ostream& os, const Fraction &frac)
{
return os << frac.m_iNom << "/" << frac.m_iDenom;
}
int& Fraction::operator [] (int i){
cout<<"reg []"<<endl;
if (i==1)
return m_iNom;
return m_iDenom;
}
const int& Fraction::operator[] (int i) const{
cout<<"const []"<<endl;
if (i==1)
return m_iNom;
return m_iDenom;
}
와 I를 행동을하려고하는 것 분수 f4 = f2 + 2; 나는 변환 생성자가있는 경우
가..\main.cpp:13: error: ambiguous overload for 'operator+' in 'f2 + 2'
..\main.cpp:13: note: candidates are: operator+(double, int) <built-in>
..\Fraction.h:27: note: const Fraction operator+(const Fraction&, const Fraction&)
그러나이 될 수 있는지, (기본 값으로 .H 파일에서의 ctor주의하시기 바랍니다)에 가정 하나 개 인수 :는하지만 다음과 같은 컴파일러 오류 "2"를 분수로 변환하면 ... 문제는 무엇일까요?
감사 Ronen에
편집 : (이 도움이 될 경우)
여기에 주요 파일의
#include <iostream>
using namespace std;
#include "Fraction.h"
int main() {
Fraction f1(1,2);
Fraction f2(2);
Fraction f3;
Fraction f4=f2+2; // problem's here
f2+f2;
Fraction f5=f2-f1+f4;
return 0;
}
질문 12 개가 물었습니다. 단 하나의 애너가 받아 들여지지 않았습니다 !! – Nawaz
나는 당신의 의미를 이해하지 못합니다 ... –
모두에게 감사합니다 !! –