Moje podstawowe zrozumienie jest takie, że nie ma implementacji czystej funkcji wirtualnej, jednak powiedziano mi, że może istnieć implementacja czystej funkcji wirtualnej. class A { public: virtual void f() = 0; }; void A::f() { cout<<"Test"<<endl; } Czy powyższy kod jest w porządku? Jaki jest cel uczynienia z niej czystej …
Czy źle jest pisać: class A { public: virtual ~A() = 0; }; dla abstrakcyjnej klasy bazowej? Przynajmniej to kompiluje się w MSVC ... Czy ulegnie awarii w czasie wykonywania?
Rozumiem potrzebę posiadania wirtualnego destruktora. Ale dlaczego potrzebujemy czystego wirtualnego destruktora? W jednym z artykułów C ++ autor wspomniał, że używamy czystego wirtualnego destruktora, gdy chcemy stworzyć abstrakcję klasy. Ale możemy uczynić klasę abstrakcyjną, sprawiając, że dowolny element członkowski działa jako czysto wirtualny. Więc moje pytania są Kiedy naprawdę sprawiamy, …
Zawsze deklarujemy czystą funkcję wirtualną jako: virtual void fun () = 0 ; To znaczy, zawsze jest przypisane do 0. Rozumiem, że ma to na celu zainicjowanie wpisu vtable dla tej funkcji na NULL, a każda inna wartość tutaj powoduje błąd czasu kompilacji. Czy to rozumienie jest poprawne, czy nie?
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 abstrakcyjnej?
Dzisiaj czytałem o czystej funkcji, pomyliłem się z jej użyciem: O funkcji mówi się, że jest czysta, jeśli zwraca ten sam zestaw wartości dla tego samego zestawu danych wejściowych i nie ma żadnych obserwowalnych skutków ubocznych. np. strlen()jest czystą funkcją, podczas gdy rand()jest nieczysta. __attribute__ ((pure)) int fun(int i) { …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.