将创建的对象分配给选定的对象

时间:2014-01-30 18:22:06

标签: c++ object fibonacci

我制作了一大类。在我的程序中,菜单会询问用户他们想要为该类创建的三个对象中的任何一个做什么。他们的一个选择是Fibonacci,此时他们还必须输入一个数字并选择其中一个对象。

输入数字是Fibonacci序列中的数字,它被放入Large Number类。到目前为止,我已经完成了所有工作,它计算到第9999个斐波纳契数,但这是我的问题:

在Large Number类中是fibonacci方法,它创建一个Large Number对象。我现在想要使所选对象成为该创建对象。

以下是我的斐波纳契方法。我已经添加了一些注释来解释发生了什么。

    void fibonacci(int n){
        Large *One = new Large(), *Two = new Large();
        One->makeOne(); // initializes the object
        Two->makeOne(); // same here
        Two->first->setnum(1); // sets "Large Number" Two to 1 (One is already 0)

        int current = 0; // counter
        while (current != n){
            Large *Temp = new Large();
            Temp->add(One,Two); // sums One and Two into a temporary Large Number
            One = Two;
            Two = Temp;
            current++;
        }

        this = One; // <-- here is my question
    }

您可以相信,一旦while循环结束,就会创建正确的数字。但现在我希望所选对象成为创建的数字(“一”)。

该方法的调用类似于以下内容:

Large A = Large();
A.fibonacci(n);

我如何使Athis}等于One

this = One;不起作用。 error: lvalue required as left operand of assignment

问:将创建的对象分配给所选对象的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

您要做的是更改this指针,也就是说,您尝试更改this指向的位置,这在C ++中是非法的。但是,可以更改this指向的对象的字段的值。类似的东西:

this->a = One->a;

...假设您的班级中有一些字段a。然后,您可以为班级中的每个字段执行此操作。最后,this指向的对象将是One指向的对象的副本。

更简洁的方法是:

*this = *One;

...在语义上,它意味着“设置this指向与One指向的内容相同的值。默认情况下(除非您已将复制运算符重写为为类类别执行其他操作)这意味着One中的每个字段都将复制到this中的相应字段。

另外,另外,您在此代码中泄漏了大量对象分配。 (当你完成它们时,你需要deletenew个对象。)