下面的代码尝试添加两个数字。为了它的乐趣,我想建立一个能够做到这一点的课程。
所以,我有方法add
添加2个数字并返回result
我希望方法getAdd
能够打印add方法的返回输出。
我该怎么做?
以下是代码
#include <iostream>
#include <string>
class Addition
{
public:
Addition(double a=0, double b=0);
double add(double a, double b);
void getAdd() const;
private:
double mA;
double mB;
};
Addition::Addition(double a, double b) : mA(a), mB(b) {}
double Addition::add(double a, double b)
{
double result = a + b;
return result;
}
void Addition::getAdd() const
{
std::cout << "Result is " << //print here the result output of add method << std::endl ;
}
int main()
{
Addition sum;
double num_a;
double num_b;
std::cout << "Enter first number to be added\n";
std::cin >> num_a;
std::cout << "Enter second number to be added\n";
std::cin >> num_b;
sum.add(num_a,num_b);
sum.getAdd();
return 0;
}
答案 0 :(得分:2)
将参数传递给getAdd?
void Addition::getAdd(double a, double b) const
{
std::cout << "Result is " << add(a,b);
}
存储结果?
class Addition
{
public:
Addition(double a=0, double b=0);
double add(double a, double b);
void getAdd() const;
private:
double mResult;
};
double Addition::add(double a, double b)
{
mResult = a + b;
return mResult ;
}
void Addition::getAdd() const
{
std::cout << "Result is " << mResult ;
}
答案 1 :(得分:1)
如果我说得对,首先你需要声明另一个变量(它可以是double result;
)。而不是使用名为result
的局部变量,而是使用刚刚创建的变量。
你的课程将是:
class Addition
{
public:
Addition(double a=0, double b=0);
double add(double a, double b);
void getAdd() const;
private:
double mA;
double mB;
double result;
};
你的add()方法是:
double Addition::add(double a, double b)
{
result = a + b;
return result;
}
你的getAdd()将是:
void Addition::getAdd() const {
std::cout << "Result is " << result << std::endl ;
}
你需要这个,因为你的getAdd()是一个const函数,它不能直接调用add()。 =)
答案 2 :(得分:1)
定义另一个班级成员double last_added;
。将它初始化为构造函数中的合理内容。如果有人在第一次调用getAdd()
之前调用add()
,则需要这样做:在C ++中未读取未初始化变量的行为。
然后,在add
函数中,将return
替换为
return last_added = result; /*the single = is deliberate*/
您可以重构getAdd()
,以返回该值:
return last_added;
或使用std::cout << "Result is " << last_added;
这是一种方法。另一个是使用您已定义的mA
和mB
成员。 add
的函数体变为
return mA = a + mB = b;
这是您的运营商优先知识的真正试金石。这样做的好处是您不需要额外的字段,因为您可以编写std::cout << "Result is " << mA + mB;
。但是,你有效地计算了两次加法,这很麻烦。
还要考虑多线程的含义。
答案 3 :(得分:1)
我们有两种方法可以达到预期的效果,
从getAdd()调用函数add(),为此您必须更改getAdd()的定义以包含两个参数。
void Addition :: getAdd(double a,double b)const
{
std :: cout&lt;&lt; “结果是”&lt;&lt;添加(A,B)&LT;&LT; std :: endl;
}
(或)
一个。
class Addition
{
public:
Addition(double a=0, double b=0);
double add(double a, double b);
void getAdd() const;
private:
double mA;
double mB;
double add;
};
Addition::Addition(double a, double b) : mA(a), mB(b) {}
double Addition::add(double a, double b)
{
add = a + b;
return add;
}
void Addition::getAdd() const
{
std::cout << "Result is " << add() << std::endl ;
}
在这种情况下,请务必先调用add()然后再调用getAdd()
sum.add(num_a,num_b);
sum.getAdd();
将打印其他垃圾值。
另一种选择如下
class Addition
{
public:
Addition(double a=0, double b=0);
double add(double a, double b);
void getAdd() const;
private:
double mA;
double mB;
double add;
};
Addition::Addition(double a, double b) : mA(a), mB(b) {}
double Addition::add(double a, double b)
{
double result = a + b;
return result;
}
void Addition::getAdd(double a, double b) const
{
add = add(a,b)
std::cout << "Result is " << add << std::endl ;
}
最后打电话 getAdd(A,B);
答案 4 :(得分:1)
我不明白你的方法和你的Addtion类的含义。 这很奇怪。
也许你的Addtion类只是一个没有任何成员的类。 double add(double a,double b)函数足以让你得到两个双变量的总和。 void getAdd(double a,double b)函数可能会打印一些关于两个双变量之和的信息。
class Addtion
{
public:
static double add(double a, double b);
static void getAdd(double a, double b);
};
或者,也许您可以使用命名空间。你真正需要的只是一些功能,而不是带有成员的类。
namespace myaddtion
{
double add(double a, double b);
void addinfo(double a, double b);
}