Jaka jest różnica między funkcją abstrakcyjną a funkcją wirtualną? W jakich przypadkach zaleca się stosowanie wirtualnych lub abstrakcyjnych? Które z nich jest
W programowaniu obiektowym funkcja wirtualna lub metoda wirtualna to funkcja lub metoda, której zachowanie można przesłonić w klasie dziedziczącej przez funkcję o tej samej sygnaturze. Ta koncepcja jest bardzo ważną częścią części polimorfizmu programowania obiektowego (OOP).
Jaka jest różnica między funkcją abstrakcyjną a funkcją wirtualną? W jakich przypadkach zaleca się stosowanie wirtualnych lub abstrakcyjnych? Które z nich jest
Uczę się C ++ i dopiero zaczynam korzystać z funkcji wirtualnych. Z tego, co przeczytałem (w książce i online), funkcje wirtualne to funkcje w klasie bazowej, które można zastąpić w klasach pochodnych. Ale wcześniej w książce, kiedy uczyłem się o dziedziczeniu podstawowym, byłem w stanie zastąpić...
Powiedzmy, że mam zajęcia Fooi Barskonfigurowałem tak: class Foo { public: int x; virtual void printStuff() { std::cout << x << std::endl; } }; class Bar : public Foo { public: int y; void printStuff() { // I would like to call Foo.printStuff() here... std::cout << y...
Słyszałem, że szablony funkcji członka klasy C ++ nie mogą być wirtualne. Czy to prawda? Jeśli mogą być wirtualne, jaki jest przykład scenariusza, w którym można by użyć takiej
O ile rozumiem, wprowadzenie overridesłowa kluczowego w C ++ 11 jest niczym innym jak tylko sprawdzeniem, czy zaimplementowana funkcja jest overrideing virtualfunkcji w klasie bazowej. Czy to
Z podaną poniżej definicją struktury ... struct A { virtual void hello() = 0; }; Podejście nr 1: struct B : public A { virtual void hello() { ... } }; Podejście nr 2: struct B : public A { void hello() { ... } }; Czy jest jakaś różnica między tymi dwoma sposobami zastąpienia funkcji...
Otrzymałem to pytanie, gdy otrzymałem komentarz do recenzji kodu, który mówi, że funkcje wirtualne nie muszą być wbudowane. Pomyślałem, że wbudowane funkcje wirtualne mogą się przydać w scenariuszach, w których funkcje są wywoływane bezpośrednio na obiektach. Ale przyszedł mi do głowy...
Czy można pisać metody wirtualne w Javie, tak jak w C ++? A może istnieje odpowiednie podejście do języka Java, które można zaimplementować i które daje podobne zachowanie? Czy mógłbym prosić o kilka
W moich projektach klas intensywnie korzystam z klas abstrakcyjnych i funkcji wirtualnych. Miałem wrażenie, że funkcje wirtualne wpływają na wydajność. Czy to prawda? Ale myślę, że ta różnica w wydajności nie jest zauważalna i wygląda na to, że wykonuję przedwczesną optymalizację....
Wszyscy wiemy, jakie funkcje wirtualne są w C ++, ale jak są wdrażane na głębokim poziomie? Czy tabela vtable może być modyfikowana lub nawet dostępna bezpośrednio w czasie wykonywania? Czy tabela vtable istnieje dla wszystkich klas, czy tylko tych, które mają co najmniej jedną funkcję wirtualną?...
Metody języka C # w interfejsach są deklarowane bez użycia virtualsłowa kluczowego i zastępowane w klasie pochodnej bez użycia overridesłowa kluczowego. Czy jest tego powód? Zakładam, że to tylko wygoda językowa, a CLR oczywiście wie, jak sobie z tym poradzić pod okładkami (metody nie są domyślnie...
Posiadanie co najmniej jednej metody wirtualnej w klasie C ++ (lub dowolnej z jej klas nadrzędnych) oznacza, że klasa będzie miała wirtualną tabelę, a każda instancja będzie miała wirtualny wskaźnik. Więc koszt pamięci jest dość jasny. Najważniejszy jest koszt pamięci w instancjach (zwłaszcza...
Czasami zauważam awarie programów na moim komputerze z błędem: „czyste wywołanie funkcji wirtualnej”. Jak te programy nawet kompilują się, gdy nie można utworzyć obiektu z klasy
W przeciwieństwie do języka Java, dlaczego C # domyślnie traktuje metody jako funkcje niewirtualne? Czy bardziej prawdopodobne jest, że będzie to problem z wydajnością, a nie inne możliwe wyniki? Przypomina mi się przeczytanie akapitu Andersa Hejlsberga o kilku zaletach, jakie przynosi istniejąca...
Mam klasę bazową z funkcją wirtualną i chcę przesłonić tę funkcję w klasie pochodnej. Czy istnieje sposób, aby kompilator sprawdzał, czy funkcja, którą zadeklarowałem w klasie pochodnej, faktycznie przesłania funkcję w klasie bazowej? Chciałbym dodać jakieś makro lub coś, co zapewnia, że nie...
Czy istnieje kiedykolwiek dobry powód, aby nie deklarować wirtualnego destruktora dla klasy? Kiedy w szczególności należy unikać pisania?
Znam metody wirtualne z PHP lub Java. Jak można je zaimplementować w Pythonie? A może muszę zdefiniować pustą metodę w klasie abstrakcyjnej i zastąpić ją?
Czy dziedziczona klasa może zaimplementować funkcję wirtualną z innym zwracanym typem (bez używania szablonu jako zwrotu)?