在c ++中为每个函数使用相同的输入

时间:2013-11-04 23:28:37

标签: c++

好的,所以我制作的程序很少,它要求用户输入,然后添加,减去等等。但不知何故,它不能正常工作。它必须为每个函数使用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;

        }

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

Number.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();

        }

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

Number.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)

请帮帮忙?

2 个答案:

答案 0 :(得分:0)

您应该将数学函数移到课外(但保留在.h.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类属于同一个文件,因为它们将Number作为参数并返回Number,但它们不会在Number上运行{{1}}类的实例,因此,它们可以像这样的自由函数更好地工作。

答案 1 :(得分: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相同的方式使用它