Mam zamieszanie związane z dziedziczeniem wirtualnej właściwości metody.Wirtualne dziedziczenie funkcji
Załóżmy, że mamy 4 klasy: klasa A, klasa B, klasa C i klasa D. Klasy są dziedziczone w następujący sposób: A -> B -> C -> D, gdzie A jest klasą podstawową.
Do tego czasu jestem pewien: Rozpoczęcie deklaracji metody klasy z wirtualnym w klasie bazowej (klasa A) sprawia, że metoda jest wirtualna dla wszystkich klas wywodzących się z klasy bazowej, w tym pochodnych z klasy klasy pochodne. (Metody klasy B i C określone jako wirtualne).
Zamieszanie jest tutaj. Co jeśli w klasie bazowej A nie będzie żadnego wirtualnego członka. Zamiast tego załóżmy, że klasa B deklaruje metodę wirtualną. Zakładam, że ta zmiana spowoduje, że funkcja będzie wirtualna dla wszystkich klas pochodnych, które należą do łańcucha dziedziczącego (klasy C i D). Logicznie rzecz biorąc, B dla C i D jest rodzajem ich "klasy bazowej", prawda? Czy ja się mylę?
Szybka sugestia: jeśli klasa bazowa posiada wirtualną metodę, chciałbym podkreślić resztę metod wirtualnych, które należą do klas pochodzących z słowo kluczowe wirtualne? Po prostu być bardziej ekspresyjnym. –
Nie jest to konieczne. Wykonanie go raz w klasie bazowej daje wszystkim klasom podrzędnym możliwość zmiany implementacji funkcji (wszystkie są dziedziczone). – theta
@RobertEagle Dodawanie 'virtual' lub' override' w klasach pochodnych nie jest konieczne *, ale chciałbym powiedzieć _yes_, dobrze jest umieścić wizualne przypomnienie semantyki funkcji tam, gdzie to możliwe. * chyba, że używasz kompilatora takiego jak "g ++", który oferuje ostrzeżenia, jeśli brakuje tych kwalifikatorów, i nakazujesz traktować ostrzeżenia jako błędy. –