如何使用具有 4 个值 2 个变量的成员函数

How to use member functions with 4 values 2 variables?

本文关键字:变量 成员 函数 个值 何使用      更新时间:2023-10-16

我正在尝试我们成员函数允许输入 2 个有理(分数(数字(4 个值(,并且只在成员函数中使用 2 个变量。 分子和分母。 似乎无法完成这项工作。

使用下面的代码,我收到以下内容:当我输入 1/2 和 1/4
时并选择"2"以添加我接收分子 = 1 分母=1 r.numerator=1 r.分母=2

所以它正在捕获 1/2 而不是 1/4,

现在当我在输入函数中打印出变量时,我得到 1/2 和 1/4。 所以我很困惑为什么 1/2 被加载并传递给 Add 而不是 1/4。

我将非常感谢您的协助。

谢谢!

以下是处于未完成状态的代码,但它确实可以编译并运行。

#include <iostream>
using namespace std;
#include <conio.h>

class Rational
{
    public:
        Rational();
        Rational(int numerator, int denominator);
        Rational Input();
        void Add(Rational r);
        void Subtract(Rational r);
        void Multiply(Rational r);
        void Divide(Rational r);
        void printRational();
        void printRationalAsDouble();
        Rational Reduction();

    private:
        int numerator, denominator;
};

Rational::Rational()
{  
numerator = 1;
denominator = 1;
}

Rational Rational::Input()
{
    Rational r;
    cout<<"Enter two fractions. The denominator cannot be 0."<<endl;
    cout<<"Enter first numerator: "<<endl; cin >> numerator;
    cout<<"Enter first denominator: " <<endl; cin >> denominator;
        if (denominator == 0)
        {
        cout<<"Please enter a valid denominator: "<<endl; cin >> denominator;
        }
        cout<<"Enter second numerator: "<<endl; cin >> r.numerator;
        cout<<"Enter second denominator: "<<endl; cin >> r.denominator;
        if (r.denominator == 0)
        {
        cout<<"Please enter a valid denominator: "<<endl; cin >> r.denominator;
        }
    cout<<endl;
    cout << numerator << "/" << denominator << " " << r.numerator 
            << "/" << r.denominator <<endl;
    cout<<endl;
    return(r);
}
void Rational::Add(Rational r)
{
    Rational Result, x;
    Result.numerator = (numerator * r.denominator) + (r.numerator * denominator);
    Result.denominator = denominator * r.denominator;
    cout << "numerator:" << numerator << endl;
    cout << "denominator:" << denominator << endl;
    cout << "r.nuerator:" << r.numerator << endl;
    cout << "r.denominator:" << r.denominator << endl;
    Result.Reduction();
    Result.printRational();
    Result.printRationalAsDouble();
}
void Rational::Subtract(Rational r)
{
    Rational Result;
    Result.numerator = (numerator * r.numerator) - (r.numerator * denominator);
    Result.denominator = denominator * r.denominator;
    Result.Reduction();
    Result.printRational();
    Result.printRationalAsDouble();
}
void Rational::Multiply(Rational r)
{
    Rational Result;
    Result.numerator = numerator * r.numerator;
    Result.denominator = denominator * r.denominator;
    Result.Reduction();
    Result.printRational();
    Result.printRationalAsDouble();
}
void Rational::Divide(Rational r)
{
    Rational Result;
    Result.numerator = numerator * r.denominator;
    Result.denominator = denominator  * r.numerator;
    Result.Reduction();
    Result.printRational();
    Result.printRationalAsDouble();
} 
void Rational::printRational()
{
    cout << numerator << "/" << denominator << "     Decimal:";
}
void Rational::printRationalAsDouble()
{
    cout << (double) numerator / denominator << endl;
}
Rational Rational::Reduction()
{
    Rational Result;
    int largest;
    largest = numerator > denominator ? numerator : denominator;
    int gcd = 1;
    for (int i = 2; i <= largest; i++)
        if(numerator % i == 0 && denominator % i == 0)
        gcd = i;
    if(gcd != 0)
    {
        Result.numerator = (numerator /= gcd);
        Result.denominator = (denominator /= gcd);
    }
    return(Result);
}
int main()
{
    cout <<"*****************************************************************************"
   << endl;
    cout <<"* This program will add two fractions, subract two fractions,               *"
   << endl; //Intro message to the user
    cout <<"* multiply two imputed fractions, or divide two fractions.                  *"
  << endl;
    cout <<"*****************************************************************************"
  << endl;

    int choice = 0;
    Rational x, A, S, M, D;
    while(choice != 6)
    {
        cout << "1. Enter two fractions." <<endl;
        cout << "2. Add and display result." <<endl;
        cout << "3. Subtract and display result." <<endl;
        cout << "4. Multiply and display result." <<endl;
        cout << "5. Divide and display result." <<endl;
        cout << "6. Quit " <<endl;
        cout <<"Selection choice: "<<endl;
        cin >> choice;
        if(choice == 1)
        {
            x.Input();
        }
        else if(choice == 2)
        {
            A.Add(x);
        }
        else if(choice == 3)
        {
            cout << "#3";
        }
        else if(choice == 4)
        {
            cout << "#4";
        }
        else if(choice == 5)
        {
            cout << "#5";
        }
    }     
return(0);
} 

当你写这个的时候

Rational Result;

指示编译器使用默认构造函数(即不带参数的构造函数(创建类型 Rational 的对象。您声明了该构造函数,但未提供其实现。

您可以添加以下代码来解决问题:

Rational::Rational() : numerator(0), denominator(1)
{
}

这将使Rational数为零,分母为 1

或者,您可以更改Result的声明以避免调用默认构造函数,如下所示:

Rational Result(
    (numerator * r.denominator) + (r.numerator * denominator)
,   denominator * r.denominator
);

您从未创建过默认构造函数。你有一个接受参数的构造函数,但你需要原型化和实现Rational::Rational()

像这样的东西是你想要的:

Rational::Rational() {
    numerator=1
    denominator=1
}

或者您认为合适的任何值,当它们在施工中没有定义时。