Dzień dobry.
Dlaczego operator przypisania nie może być wirtualny?
Dzięki. Michał
Dzień dobry.
Dlaczego operator przypisania nie może być wirtualny?
Dzięki. Michał
A nie może?
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;
}
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!