Załóżmy, że mamy klasę "Zwierzę" i podklasy "Kot" i "Pies".Dlaczego musimy deklarować wirtualne metody jako takie
Załóżmy, że chcemy pozwolić, aby zarówno "Kot", jak i "Pies" wydały dźwięk (cat: "meow" - pies: "woof"), kiedy przekazujemy ich obiekty do funkcji pośredniej dla dowolnego "Zwierzęcia".
Dlaczego musimy użyć wirtualnej metody, aby to zrobić? Czy nie możemy po prostu zrobić Animal-> makeNoise() bez zdefiniowania wirtualnej metody w "Animal"? Skoro "Kot" i "Pies" są zwierzętami, czy nie byłoby jasne, że "makeNoise()" odnosi się do Zwierzęcia, które zostało przekazane do funkcji?
Czy to tylko kwestia składni czy czegoś więcej? Jestem prawie pewien, że w Javie nie musimy tego robić.
@Antonio, wirtualne klasy bazowe nie mają absolutnie nic wspólnego z metodami wirtualnymi. Jest to tylko jeden z przypadków, gdy C++ wykonuje bardzo dobrą robotę nadużywania słowa kluczowego w kilku celach. –
Co jeśli miniesz szczura, który nie miał metody 'makeNoise()'. –