2015-10-06 2 views
1

Эй, ребята, я начну, я скажу, что я просмотрел множество подобных программ, прежде чем публиковать этот вопрос и все равно нуждаюсь в некоторой помощи. Моя проблема заключается в дополнительной функции класса фракций, где мне нужно добавить одну фракцию в другую. У меня есть один класс и в настоящее время я работаю с экземплярами этого класса (fractionObject и fractionObject2). Я сохраняю свои фракции по отдельности, один во фракционном объекте и один во фракции Object2. Как добавить их в функцию класса фракций «Добавить»?Добавление фракций и классов - Woot

Любые советы будут высоко оценены! Спасибо за ваше время!

#include <iostream> 
#include <string> 
#include <sstream> 
using namespace std; 

// Regular prototypes 
int stringToNumber(const string &Text); 
int GCD(int, int); 
int LCM(int, int); 

class fraction{ 

public: // Access Specifier 
    int numerator; 
    int denominator; // Can never be 0 



    // Function Prototypes 
    fraction(); 
    void setNumDen(); 
    void reduce(); 
    void add(); 


}; 

// Member functions definitions 
fraction::fraction() 
{ 
    numerator = 0; 
    denominator = 0; 
} 

void fraction::setNumDen() 
{ 
    string numString; 
    string denString; 
    do{ 
     cout << "Enter a numerator and denominator of fraction 1 separated by whitespace: "; 
     getline(cin, numString, ' '); 
     getline(cin, denString); 
     if (denString == "0") 
      cout << endl << "Please enter a number that isn't zero." << endl; 
    } while (denString == "0"); // Making sure denominator is not zero 

    numerator = stringToNumber(numString); 
    denominator = stringToNumber(denString); 

} 

void fraction::reduce() 
{ 
    int leastCommonMultiple = 0; 

    leastCommonMultiple = LCM(numerator, denominator); 

    numerator /= leastCommonMultiple; 
    denominator /= leastCommonMultiple; 
} 

void fraction::add() 
{ 
    int leastComDen; 

} 

int main() 
{ 

    fraction fractionObject, fractionObject2; 

    fractionObject.setNumDen(); 
    fractionObject2.setNumDen(); 
    // Reducing and displaying the reduced fractions 
    fractionObject.reduce(); 
    fractionObject2.reduce(); 
    cout << "Reduced Fraction 1 = " << fractionObject.numerator << "/" << fractionObject.denominator << "\t" << "Reduced Fraction 2 = " << fractionObject2.numerator << "/" << fractionObject2.denominator << endl; 
    // Adding and displaying the fractions 



    system("pause"); 
    return 0; 
} 

// Function to convert string to number 
int stringToNumber(const string &Text)//Text not by const reference so that the function can be used with a 
{        //character array as argument 
    stringstream ss(Text); 
    int result; 
    return ss >> result ? result : 0; 
} 

// result=GCD(a,b) 
int LCM(int a, int b) { 
    int temp = 0; 

    while (b != 0) { 
     temp = b; 
     b = a%b; 
     a = temp; 
    } 
    return a; 
} 

// result=LCM(a,b); 
int GCD(int a, int b) { 
    int result = 0; 

    result = a * (b/LCM(a, b)); 
    return result; 
} 
+0

Я рекомендую начать с изменения в прототипе добавления: 'void add (const fraction & toAdd);' Передать фракцию, которая будет добавлена ​​в эту '' фракцию. – user4581301

+0

Спасибо за ваш вклад. Я сделал это, и я все еще работаю, чтобы понять это! – Drew

+0

Обратите внимание, что, поскольку у вас есть метод уменьшения, вам не нужно сначала искать наименьший общий знаменатель (как вы планируете сделать). Просто найдите ** ** общий множественный (например, произведение двух знаменателей), когда вызов будет сокращен. –

ответ

1

Нет полного ответа здесь, но добавить должны иметь два const fraction& аргумента и возвращает временный fraction объект. Вы можете переименовать его operator+. Многие библиотеки добавляют оператора +=, который не требует создания временного объекта. C++ 11 позволяет сократить накладные расходы этих временных объектов с помощью конструктора перемещения.

Что касается реализации, здесь есть подсказка: 1/6 + 1/9 = (9 + 6)/54 = 5/18. Я заметил, что у вас уже есть функция уменьшения.

+0

В основном согласен. Если 'add' собирался взять две фракции и вернуть новую фракцию, это должен быть либо статический метод, либо свободная функция. 'reduce' изменяет объект, а' add' должен вести себя одинаково. – user4581301

+0

Спасибо за помощь, ребята! Я сближаюсь с этим! – Drew

Смежные вопросы