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;

        }

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

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

        }

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

番号.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

When you do

    void Number::Add( Number otherNumber ) {

        number = number + otherNumber.Get();

    }

by calling x.add(y) you are actually modifying the number value of x. You have two options. like nhgrif suggested you could have separate addNumbers function that isn't part of the class and does as he suggests or you could do something like

    Number Number::Add( Number otherNumber ) {

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

and use it the same way that he suggested to use addNumbers

于 2013-11-04T23:52:48.680 に答える
0

数学関数をクラスの外に移動する必要があります (ただし、 ファイル.h.cppファイルには残ります)。足し算がどのように見えるべきかをお見せします。残りは理解できるはずです。

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

次に、これをメインで呼び出すには、次のようにします。

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

xこれにより、との内容は変更されず、合計を含むy新しいオブジェクト が得られます。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組織の観点から、これらは s を引数として取りNumber、 を返すため、クラスと同じファイルに属しNumberますが、クラスのインスタンスでは動作しないため、Numberこのようなフリー関数としてはるかにうまく機能します.

于 2013-11-04T23:44:06.503 に答える