Salve, ho questo codice che produce il seguente output:set1,set2,set2,set2.
Forse non ho ben capito il this ma non mi spiego perchè il terzo output sia set2 invece che set1.


codice:
#include <iostream>
class B;
class A
{
public:
    virtual A* set(A* a) = 0;
};

class B : public A
{
public:
    virtual A* set(B* b)
    {
        std::cout << "set1 has been called" << std::endl;
        b = this;
        return b;
    }

    virtual B* set(A* a)
    {
        std::cout << "set2 has been called" << std::endl;
        a = this;
        return this;
    }
};

int main(int argc, char *argv[])
{
    B *b = new B();
    A *a = b->set(b);
    a = b->set(a);
    a = a->set(b);
    a = a->set(a);
    return 0;
}