【问题标题】:Calculations in class not outputting result类中的计算不输出结果
【发布时间】:2021-07-11 00:55:28
【问题描述】:

我有一个作业,我必须以分数的形式对一组两个数字进行加/减/乘/除,因此 a/b + c/d 将是 a * d + b * c / b * d .我有代码可以工作,但结果没有正确显示。到目前为止,我只是在测试添加成员函数以确保其正常工作,但它只是输出第一个输入的值。以下是我的代码:

#include <iostream>
#include <cmath>
#include <cstdlib>
#include <fstream>
#include <iomanip>

using namespace std;

class Rational
{
    private:
        int numer;
        int denomer;

    public:
        Rational()
        {
            numer = 0;
            denomer = 1;
        }

        int getnumer()
        {
            return numer;
        }

        void setnumer(int numer)
        {
            numer = numer;
        }

        int getdenomer ()
        {
            return denomer;
        }

        void setdenomer (int denomer)
        {
            denomer = denomer;
        }

        Rational(int n, int d)
        {
            numer = n;
            denomer = d;
        }

        Rational (int n)
        {
            numer = n;
            denomer = 1;
        }

        Rational add (Rational r1)
        {
            int a, b, c, d, r;
            Rational r2;

            a = getnumer();
            b = getdenomer();
            c = r1.getnumer();
            d = r1.getdenomer();

            r2.setnumer(a * d + b * c);
            r2.setdenomer(b * d);

            return r2;
        }

        Rational sub (Rational r1, Rational r2)
        {
            int a, b, c, d, r;

            a = getnumer();
            b = getdenomer();
            c = r1.getnumer();
            d = r1.getdenomer();

            r2.setnumer(a * d - b * c);
            r2.setdenomer(b * d);

            return r2;
        }

        Rational mul (Rational r1, Rational r2)
        {
            int a, b, c, d, r;

            a = getnumer();
            b = getdenomer();
            c = r1.getnumer();
            d = r1.getdenomer();

            r2.setnumer(a * c);
            r2.setdenomer(b * d);

            return r2;
        }

        Rational div (Rational r1, Rational r2)
        {
            int a, b, c, d, r;

            a = getnumer();
            b = getdenomer();
            c = r1.getnumer();
            d = r1.getdenomer();

            r2.setnumer(a * d);
            r2.setdenomer(c * b);

            return r2;
        }

        bool lesst (Rational r1)
        {
            int a, b, c, d, r;

            a = getnumer();
            b = getdenomer();
            c = r1.getnumer();
            d = r1.getdenomer();

            if ((a * b) < (c*b))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        Rational neg (Rational r1, Rational r2)
        {
            int a, b, c, d, r;

            a = getnumer();
            b = getdenomer();
            c = r1.getnumer();
            d = r1.getdenomer();

            r2.setnumer(-a);
            r2.setdenomer(-b);

            return r2;
        }

        Rational equal_num (Rational r1, Rational r2)
        {
            int a, b, c, d, r;

            a = getnumer();
            b = getdenomer();
            c = r1.getnumer();
            d = r1.getdenomer();

            if ((a * d) == (c * b))
            {
                cout << "The numbers are equal";
            }
            else
            {
                // Nothing
            }
        }

        void printNumber()
        {
            cout << getnumer() << "/" << getdenomer();
        }


        //void inputz (istream& fin)
};

int main()
{
    int num1, den1, num2, den2;

    cout << "Please enter the first numerator value: ";
    cin >> num1;

    cout << "Please enter the first denominator value: ";
    cin >> den1;

    cout << "Please enter the second numerator value: ";
    cin >> num2;

    cout << "Please enter the second denominator value: ";
    cin >> den2;

    cout << "\nAddition: ";
    cout << num1 << " / " << den1 << " + " << num2 << " / " << den2 << " = ";
    Rational r1(num1, den1);
    Rational r2 (num2, den2);

    r1.add(r2);

    r1.printNumber();

    return 0;
}

我得到的输出是:

Please enter the first numerator value: 2
Please enter the first denominator value: 3
Please enter the second numerator value: 1
Please enter the second denominator value: 2

Addition: 2 / 3 + 1 / 2 = 2/3

【问题讨论】:

  • 你忘了给add打电话
  • 谷歌搜索“变量阴影”
  • 谢谢 selbie 我刚刚注意到了,但我注意到了,而且我仍然得到相同的结果
  • 您的 add 函数返回一个新的 Rational,然后您不会将其分配给变量。尝试类似 r1 = r1.add(r2);
  • 谢谢,但我试过了,现在无论我输入什么值,我都得到 0/1

标签: c++ function class


【解决方案1】:

您的问题是您没有将 add 函数的答案保存到另一个类中,因此它可能会给出输出。另外,我建议在为类的私有变量赋值时使用 this 指针。

using namespace std;

class Rational
{
    private:
        int numer;
        int denomer;

    public:
        Rational()
        {
            this -> numer = 0;
            this -> denomer = 1;
        }

        int getnumer()
        {
            return numer;
        }

        void setnumer(int n)
        {
            this -> numer = n;
        }

        int getdenomer ()
        {
            return denomer;
        }

        void setdenomer (int d)
        {
            this -> denomer = d;
        }

        Rational(int n, int d)
        {
            this -> numer = n;
            this -> denomer = d;
        }

        Rational (int n)
        {
            this -> numer = n;
            this -> denomer = 1;
        }

        Rational add (Rational r1)
        {
            int a, b, c, d, r;
            Rational r2;

            a = getnumer();
            b = getdenomer();
            c = r1.getnumer();
            d = r1.getdenomer();

            r2.setnumer((a * d) + (b * c));
            r2.setdenomer(b * d);

            return r2;
        }
        
        void printNumber(){
            cout << getnumer() << "/" << getdenomer() << endl;
        }
};

int main()
{
    int num1, den1, num2, den2;
    Rational r3;

    cout << "Please enter the first numerator value: ";
    cin >> num1;

    cout << "Please enter the first denominator value: ";
    cin >> den1;

    cout << "Please enter the second numerator value: ";
    cin >> num2;

    cout << "Please enter the second denominator value: ";
    cin >> den2;

    cout << "\nAddition: ";
    cout << num1 << " / " << den1 << " + " << num2 << " / " << den2 << " = ";
    Rational r1(num1, den1);
    Rational r2 (num2, den2);

    r3 = r1.add(r2);

    r3.printNumber();

    return 0;
}

【讨论】:

    猜你喜欢
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 2016-05-15
    • 2018-09-06
    • 1970-01-01
    相关资源
    最近更新 更多