0

好的,所以我做了一个小程序,它要求用户输入,然后加、减等。但不知何故,它不能正常工作。它必须为每个函数使用 x 和 y 输入,但似乎它使用了以前的输出。

这是一个代码:

主要的:

//  ========================================================================
//  NumberProject.cpp : Defines the entry point for the console application.
//  ========================================================================

//  ==================
   #include "stdafx.h"
   #include <iostream>
//  ==================

//  ================
//  Class Inclusions
//  ==================
   #include "Number.h"
//  ==================

//  ====================
    using namespace std;
//  ====================

    void Banner();

//  =============
    int main( ) {

//      ================================
//      Variable and Object Declarations
//      ============
        char answer;
        bool goAgain = true;

        int  integerValue;

        Number x;
        Number y;

        Banner();

//      =========
//      User loop
//      ===================
        while ( goAgain ) {

            cout << "Enter an integer:  ";
            cin >> integerValue;
            x.Set( integerValue );

            cout << "Enter an integer:  ";
            cin >> integerValue;
            y.Set( integerValue );
            cout << endl;

//          Addition

            x.Add( y );
            cout << "Addition: ";
            x.Output( );

//          Subtraction

            x.Subtract( y );
            cout << "Subtraction: ";
            x.Output( );

//          Multiplication

            x.Multiply( y );
            cout << "Multiplication: ";
            x.Output( );

//          Division

            x.Divide( y );
            cout << "Division: ";
            x.Output( );

//          ===========================
//          User loop termination code.
//          ====================================================
            cout << "Would you like go again continue? (y/n)" << endl;
            cin >> answer;

            if ( answer == 'n' )
                goAgain = false;
//          ====================

        } // while
//      ==========

        return 0;

    } // Function main( )

//  =====================

        void Banner() {

            cout << "====================================" << endl;
            cout << "   Welcome to the Number Project    " << endl;
            cout << "====================================" << endl;
            cout << endl;

        }

// ================================================================

编号.cpp:

//  ==================
   #include "StdAfx.h"
   #include "math.h"     // Needed for sqrt and pow.
   #include <string>
   #include <iostream>
//  ==================

//  ================
//  Class Inclusions
//  ==================
   #include "Number.h"
//  ==================

//  ====================
    using namespace std;
//  ====================

        Number::Number( void ) {

            number = 0;
        }

        Number::Number( int integerValue ) {

            number = integerValue;

        }

        Number::~Number( void ) {

        }

        int Number::Get( ) {

            return number;

        }

        void Number::Set( int integerValue ) {

            number = integerValue;

        }

        void Number::Output( ) {

            cout << number << endl;
            cout << endl;

        }


        void Number::Add( Number otherNumber ) {

            number = number + otherNumber.Get();

        }

        void Number::Subtract( Number otherNumber ) {

            number = number - otherNumber.Get();


        }

        void Number::Multiply( Number otherNumber ) {

            number = number * otherNumber.Get();

        }

        void Number::Divide( Number otherNumber ) {

            number = number / otherNumber.Get();

        }

    // =================================================

编号.h:

//  ===========
   #pragma once
//  ===========

//  ==============
    class Number {

        public:

//          ============
//          Constructors
//          ===============
            Number( void );
            Number( int );
//          ==============

//          ==========
//          Destructor
//          ===============
           ~Number( void );
            int  Number::Get( );       // Accessor
            void Number::Set( int );   // Mutator
            void Number::Output();
            void Number::Add( Number );
            void Number::Subtract( Number );
            void Number::Multiply( Number );
            void Number::Divide( Number );
//          ===========================

        private:

            int number;
    };

示例输出:

==================================== Welcome to the Number Project ===================================  
Enter an integer: 2 Enter an integer: 3 Addition: 5 Subtraction: 2 Multiplication: 6 Division: 2
Would you like go again continue? (y/n)

请帮忙?

4

2 回答 2

0

您应该将数学函数移到课堂之外(但保留在.hand.cpp文件中)。我会告诉你添加应该是什么样子,你应该能够弄清楚其余的。

Number addNumbers(Number a, Number b)
{
    return Number(a.Get()+b.Get());
}

然后在 main 中调用它,您将执行以下操作:

Number result;
result = addNumbers(x, y);

这将保留 和 的内容,xy为您提供一个新对象result,其中包含总和。冲洗并重复您的其他数学函数。

为了澄清“将它移到课堂之外”,在你的 中.h,你有这个:

class Number {
    //stuff
};

其中包括"//stuff"您的数学函数。所以改变你.h的样子:

class Number {
    //stuff minus math functions
};

Number addNumbers(Number a, Number b);
Number subtractNumbers(Number a, Number b);
//etc.

从组织的角度来看,它们与您的类属于同一个文件,Number因为它们将Numbers 作为参数并返回 a Number,但它们不对Number类的实例进行操作,因此,它们作为像这样的自由函数工作得更好.

于 2013-11-04T23:44:06.503 回答
0

当你这样做

    void Number::Add( Number otherNumber ) {

        number = number + otherNumber.Get();

    }

通过调用 x.add(y) 你实际上是在修改 x 的数值。你有两个选择。就像 nhgrif 建议的那样,您可以有单独的 addNumbers 函数,该函数不属于该类并按照他的建议进行操作,或者您可以执行类似的操作

    Number Number::Add( Number otherNumber ) {

        return Number( number + otherNumber.Get());
    }

并以与他建议使用 addNumbers 相同的方式使用它

于 2013-11-04T23:52:48.680 回答