我只是嘗試幾個代碼來理解超載< <運算符,大多數解釋都是很容易理解的,但我正在面對使用const關鍵字的一些問題。 下面的代碼是給我一個編譯錯誤,他說敵不過操作數分數,分數)影響不使用常量,而重載*運算符
#include<iostream>
using namespace std;
class Fraction
{
private:
int m_numerator;
int m_denominator;
public :
Fraction(int val1, int val2):m_numerator(val1),m_denominator(val2){};
void print()
{
cout<<m_numerator<<"/"<<m_denominator<<endl;
}
friend Fraction operator*(Fraction &f1,Fraction &f2);
friend Fraction operator*(Fraction &f1, int value);
friend Fraction operator*(int value,Fraction &f1);
};
Fraction operator*(Fraction &f1,Fraction &f2)
{
return Fraction(f1.m_numerator * f2.m_numerator, f1.m_denominator * f2.m_denominator);
}
Fraction operator*(Fraction &f1, int value)
{
return Fraction(f1.m_numerator * value, f1.m_denominator);
}
Fraction operator*(int value,Fraction &f1)
{
return Fraction(f1.m_numerator * value, f1.m_denominator);
}
int main()
{
Fraction f1(2, 5);
f1.print();
Fraction f2(3, 8);
f2.print();
Fraction f3 = f1 * f2;
f3.print();
Fraction f4 = f1 * 2;
f4.print();
Fraction f5 = 2 * f2;
f5.print();
Fraction f6 = Fraction(1, 2) * Fraction(2, 3) * Fraction(3, 4);
f6.print();
}
與上面的代碼的問題是,有沒有const的前面有一個Fraction對象,而使用它作爲函數參數,下面的代碼工作正常:
#include<iostream>
using namespace std;
class Fraction
{
private:
int m_numerator;
int m_denominator;
public :
Fraction(int val1, int val2):m_numerator(val1),m_denominator(val2){};
void print()
{
cout<<m_numerator<<"/"<<m_denominator<<endl;
}
friend Fraction operator*(const Fraction &f1,const Fraction &f2);
friend Fraction operator*(const Fraction &f1, int value);
friend Fraction operator*(int value,const Fraction &f1);
};
Fraction operator*(const Fraction &f1,const Fraction &f2)
{
return Fraction(f1.m_numerator * f2.m_numerator, f1.m_denominator * f2.m_denominator);
}
Fraction operator*(const Fraction &f1, int value)
{
return Fraction(f1.m_numerator * value, f1.m_denominator);
}
Fraction operator*(int value,const Fraction &f1)
{
return Fraction(f1.m_numerator * value, f1.m_denominator);
}
int main()
{
Fraction f1(2, 5);
f1.print();
Fraction f2(3, 8);
f2.print();
Fraction f3 = f1 * f2;
f3.print();
Fraction f4 = f1 * 2;
f4.print();
Fraction f5 = 2 * f2;
f5.print();
Fraction f6 = Fraction(1, 2) * Fraction(2, 3) * Fraction(3, 4);
f6.print();
}
爲什麼常量在這裏打這麼多重要的角色,可以有場景,其中,我不需要const關鍵字,我怎麼去處理這些案件。 PS:錯誤在特定行中: 分數f6 =分數(1,2)*分數(2,3)*分數(3,4);分數
任何解釋將是一個很大的幫助。
這是一個錯誤,我剛剛編輯了這個問題。謝謝 – user3530616