好的,所以我制作的程序很少,它要求用户输入,然后添加,减去等等。但不知何故,它不能正常工作。它必须为每个函数使用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)
请帮帮忙?
答案 0 :(得分:0)
您应该将数学函数移到课外(但保留在.h
和.cpp
文件中。我会告诉你添加应该是什么样的,你应该能够弄清楚剩下的。
Number addNumbers(Number a, Number b)
{
return Number(a.Get()+b.Get());
}
然后在main中调用它,你会做这样的事情:
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
类属于同一个文件,因为它们将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相同的方式使用它