Итак, я пытался создать медианный генератор, который принимает дроби и генерирует медиану, однако, похоже, что в настоящее время я не могу отсортировать вектор своего собственного определяемого класса RationalNumber.Я перегружен рядом операторов (* + / == и т. Д.), Однако они не работают при вызове inline в другом месте.
RationalNumber RationalNumber::operator*(const RationalNumber& r)
{
RationalNumber result(numerator * r.numerator, denominator * r.denominator);
result.reduceFraction();
return result;
}
RationalNumber RationalNumber::operator*(int x)
{
RationalNumber result(numerator * x, denominator);
result.reduceFraction();
return result;
}
RationalNumber RationalNumber::operator/(const RationalNumber& r)
{
RationalNumber result(numerator * r.denominator, denominator * r.numerator);
result.reduceFraction();
return result;
}
RationalNumber RationalNumber::operator/(int x)
{
RationalNumber result(numerator, denominator * x);
result.reduceFraction();
return result;
}
bool RationalNumber::operator<(const RationalNumber& r)
{
if(this->floatingPoint < r.floatingPoint)
{
return true;
}
return false;
}
bool RationalNumber::operator<(int x)
{
if(floatingPoint < (double) x)
{
return true;
}
return false;
}
bool RationalNumber::operator>(const RationalNumber& r)
{
if(floatingPoint > r.floatingPoint)
{
return true;
}
return false;
}
bool RationalNumber::operator>(int x)
{
if(floatingPoint > (double) x)
{
return true;
}
return false;
}
RationalNumber RationalNumber::operator+(const RationalNumber& r)
{
RationalNumber result((numerator * r.denominator)+(r.numerator*denominator),denominator * r.denominator);
result.reduceFraction();
return result;
}
RationalNumber RationalNumber::operator+(int x)
{
RationalNumber result(numerator * x,denominator);
return result;
}
Так что здесь у меня есть класс, который должен представлятьрациональные числа с перегруженными операторами, предназначенные для проведения арифметики.Однако, когда в основном классе выполняется следующее:
RationalNumber medianCalculator(std::vector<RationalNumber*> &listOfRationalNumbers)
{
std::sort(listOfRationalNumbers.begin(),listOfRationalNumbers.end());
if(!(listOfRationalNumbers.size() % 2)){
return ((RationalNumber(*listOfRationalNumbers.at((listOfRationalNumbers.size()/2) +1)) + (RationalNumber(*listOfRationalNumbers.at(listOfRationalNumbers.size()/2))) / 2));
} else {
return RationalNumber(*listOfRationalNumbers.at(listOfRationalNumbers.size() +1));
}
}
Во-первых, кажется, что он генерирует исключение вне диапазона, но, что более важно, кажется, что перегрузка оператора не работает как std ::вызов сортировки, похоже, не работает или арифметика.