-1
   class MathOperations{
 public:
 void Message();
 void setSum(int);
 void setSuB(int);
 void setMul(int);
 void setDiv(int);
 void setSqrt(int);
 int getSum();
 int getSub();
 int getMul();
 int getDiv();
 int getSqrt();
private:
int sum, subtract, multiply, divide, sqrt;

有没有更好的方法在课堂上使用 setter 和 getter ???如果有请给我一些例子。我只是想多学习一点关于类的知识,所以即使我只是一个初学者,我也试图实现我的知识。我在一本书中读到,使用静态方法和使用关键字 this 更好,但不确定它是如何工作的..任何简单的建议将不胜感激。

4

2 回答 2

2

如果这个类只是一堆简单的setters/getters我会考虑用公共变量制作一个struct(它们几乎与类相同,但在公共变量的情况下我更喜欢命名它struct)。但无论如何,如果你的方法是那个简单的编译器可能会inline

don't optimize the code until you found a bottleneck

于 2012-07-20T04:06:03.710 回答
0
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这行代码中有很多内容,让我分解并解释一下。

  1. this->a指的是类 a 的本地成员,它是一个整数。在此处阅读有关课程的更多信息:http ://www.cplusplus.com/doc/tutorial/classes/
  2. (double)this->a对于我们要进行的数学运算,我们希望this->a是双精度数,以便在进行除法时得到一个不错的数字,例如 3.141519。为此,我们cast将其转换为双精度数,基本上是告诉编译器在将整数存储到 tempa 之前将其转换为内存中的双精度数。在此处阅读有关数据类型的更多信息:http ://www.cplusplus.com/doc/tutorial/variables/ 在此处阅读有关类型转换的更多信息:http ://www.cplusplus.com/doc/tutorial/typecasting/
  3. double tempa =在这里,我们将新的 double 值从 2. 分配给可用于除法的临时值 tempa。

如果您觉得 cplusplus.com 的教程有点难以理解,您可以在http://www.cprogramming.com/tutorial/c++-tutorial.html尝试一下,这会更容易阅读。

于 2012-07-20T04:06:53.740 回答