class MathOperations{
public:
void Message();
void setA(int);
void setB(int);
int getA();
ing getB();
int getSum();
int getSub();
int getMul();
double getDiv();
double getSqrt();
private:
int a, b;
您不想存储 sum、sub、mul 和 divide 的值,而是要设置 A 和 B,然后计算答案。此外,除非您预期截断,否则除法应返回双精度或浮点数。我的意思是如果你有 getDiv() 返回一个 int 并且 a=1 和 b=2 它将返回 0(1/2 = 0.5 截断为 0),如果你正在寻找一个很好的浮点答案你应该使用双精度或浮点数。
下面是 getDiv() 的示例实现:
double MathOperations::getDiv() {
double tempa = (double)this->a;
double tempb = (double)this->b;
return tempa/tempb;
}
就优化当前示例而言,如果您正在执行以下操作:
class foo {
public:
void setA(int);
void setB(int);
int getA();
int getB();
private:
int A,B;
}
您获得的唯一真正开销(假设编译器未优化此代码)是您在获取或设置变量时向堆栈添加函数调用,并在完成时将其弹出并制作要返回的变量副本。这在现代计算机上可以忽略不计。
编辑:double tempa = (double)this->a
这行代码中有很多内容,让我分解并解释一下。
this->a
指的是类 a 的本地成员,它是一个整数。在此处阅读有关课程的更多信息:http ://www.cplusplus.com/doc/tutorial/classes/
(double)this->a
对于我们要进行的数学运算,我们希望this->a
是双精度数,以便在进行除法时得到一个不错的数字,例如 3.141519。为此,我们cast
将其转换为双精度数,基本上是告诉编译器在将整数存储到 tempa 之前将其转换为内存中的双精度数。在此处阅读有关数据类型的更多信息:http ://www.cplusplus.com/doc/tutorial/variables/ 在此处阅读有关类型转换的更多信息:http ://www.cplusplus.com/doc/tutorial/typecasting/
double tempa =
在这里,我们将新的 double 值从 2. 分配给可用于除法的临时值 tempa。
如果您觉得 cplusplus.com 的教程有点难以理解,您可以在http://www.cprogramming.com/tutorial/c++-tutorial.html尝试一下,这会更容易阅读。