Dlaczego operator przypisania nie może być wirtualny?

0

Dzień dobry.

Dlaczego operator przypisania nie może być wirtualny?

Dzięki. Michał

0

A nie może?

3

Dlaczego uważasz, że nie może? Jak najbardziej może, tylko zadeklarowanie go jako wirtualny nie będzie miało żadnego wymiernego efektu dla idiomatycznych deklaracji (poza potencjalnym spadkiem wydajności oraz - jeśli to jedyna wirtualna funkcja w klasie - przekształceniem klasy w polimorficzną).

Tutaj wywołana zostanie funkcja z klasy A.

struct A
{
    virtual A& operator=(A const&) {
        BARK;
        return *this;
    }
};

struct B : A
{
    virtual B& operator=(B const&) {
        BARK;
        return *this;
    }
};

int main()
{
    B b;
    A& a = b;
    a = b;
}

https://wandbox.org/permlink/kyXdcz3Voqr7xOhh

A tutaj, ponieważ sygnatura funkcji jest odpowiednia aby nie została potraktowana jako overload, tylko override, zostanie wywołana funkcja z klasy B:

truct A
{
    virtual A& operator=(A const&) {
        BARK;
        return *this;
    }
};

struct B : A
{
    virtual B& operator=(A const&) {
        BARK;
        return *this;
    }
};

int main()
{
    B b;
    A& a = b;
    a = b;
}

https://wandbox.org/permlink/kuCPHX31HYUAyh6q

0

Dzięki za odpowiedzi. Źle przeczytałem polecenie i pytanie do zadania. Napisano dlaczego nie jest wirtualny w tym przypadku, jaki podano w przykładzie.

Dzięki!

1 użytkowników online, w tym zalogowanych: 0, gości: 1