2
class foo{

public:
    double v1, v2, v3;
    double x, y;

    foo(const double &a){
        set_var();

        x = a;

        if(a == v1)
            y = 1;
        else if(a == v2)
            y = 0;
        else if(a == v3)
            y = 2;
    }

    void set_var(){
        // v1, v2 and v3 will always be the same values as the corresponding double values
        // that foo a,b and c are being set to in main()
        v1 = 1.4;
        v2 = 1.4;
        v3 = 1.4;
    }

};

在主要功能中:

main(){
    foo a = 1.2, b = 1.2, c = 1.2;
}

本质上,当我们尝试将 'foo a, b, c' 设置为相同的 double 值(因此 'v1, v2, v3' 也是相同的值)时,我希望这段代码执行的操作是 foo a=1.4给出 ay=1,foo b=1.4 给出 by=0,而 foo c=1.4 给出 cy=2

简而言之伪代码。基本上,'foo a' 应该总是使用第一个 if 子句,'foo b' 应该总是使用第二个,而 'foo c' 应该总是使用第三个。

作为这个任务的一部分,我必须以这种方式实现 main 函数。它不能改变。

我的第一个想法是,即使我试图将 foo a,b,c 设置为相同的双精度,该双精度总是在内存中占据不同的位置,不是吗?所以也许我可以在构造函数中以某种方式传递 double &x 的地址?然后将该地址设置为代表 v1、v2 和 v3,而不是首先使用这些变量?

即使双值相等,我只需要获取代码来执行我在上面概述的几段内容。

4

2 回答 2

2

由于您的问题似乎与家庭作业有关,因此我将向您指出静态成员变量的方向,简而言之,这些变量是在给定类的所有实例之间共享的类变量。您可以使用这些变量中的一个或多个来跟踪实例实例化的进度。

于 2012-11-19T01:34:45.833 回答
0

不幸的是,如果以下两个都是真的:

简而言之伪代码。基本上,'foo a' 应该总是使用第一个 if 子句,'foo b' 应该总是使用第二个,而 'foo c' 应该总是使用第三个。

作为这个任务的一部分,我必须以这种方式实现 main 函数。它不能改变。

……那你就不走运了。除了它们的名称外,您的 main 函数a中 ,b和之间没有任何区别。c

也许我误解了你的措辞 - 如果是这样,你能澄清一下吗?

于 2012-11-19T01:52:08.713 回答