Klasa abstrakcyjna to klasa, której nie można utworzyć instancji. Generalnie mają być rozszerzone / podklasy i generalnie mają „abstrakcyjne metody”, które muszą być implementowane przez podklasy.
„Klasa abstrakcyjna” i „interfejs” są podobnymi pojęciami, a interfejs jest bardziej abstrakcyjny z tych dwóch. Jednym z czynników różnicujących jest to, że klasy abstrakcyjne zapewniają w razie potrzeby implementacje metod dla klas pochodnych. Jednak w języku C # ten czynnik różnicujący został zmniejszony dzięki niedawnemu wprowadzeniu metod rozszerzenia, które umożliwiają …
Znam składnię, reguły zastosowane do klasy abstrakcyjnej i chcę znać użycie klasy abstrakcyjnej Klasy abstrakcyjnej nie można utworzyć bezpośrednio, ale można ją rozszerzyć o inną klasę Jaka jest z tego korzyść? Czym różni się od interfejsu? Wiem, że jedna klasa może implementować wiele interfejsów, ale może rozszerzyć tylko jedną klasę …
Czy ktoś może szczegółowo wyjaśnić, jak dokładnie działa wirtualna tabela i jakie wskaźniki są powiązane, gdy wywoływane są funkcje wirtualne. Jeśli faktycznie są wolniejsze, czy możesz pokazać, że czas potrzebny na wykonanie funkcji wirtualnej jest dłuższy niż normalne metody klasowe? Łatwo jest zapomnieć o tym, jak / co się dzieje, …
Chociaż nie jest to obowiązkowe w standardzie C ++, wydaje się, że GCC, na przykład, implementuje klasy nadrzędne, w tym czysto abstrakcyjne, poprzez włączenie wskaźnika do tabeli v dla tej abstrakcyjnej klasy w każdej instancji danej klasy . Oczywiście powoduje to powiększenie rozmiaru każdej instancji tej klasy o wskaźnik dla …
Jako programista C ++ jestem przyzwyczajony do plików nagłówkowych C ++ i uważam, że korzystne jest posiadanie pewnego rodzaju wymuszonej „dokumentacji” w kodzie. Zwykle mam zły czas, kiedy muszę czytać kod C # z tego powodu: nie mam takiej mentalnej mapy klasy, z którą pracuję. Załóżmy, że jako inżynier oprogramowania …
W 2000 roku mój kolega powiedział mi, że to anty-wzorzec, aby publiczne metody były wirtualne lub abstrakcyjne. Na przykład uważał taką klasę za niezbyt dobrze zaprojektowaną: public abstract class PublicAbstractOrVirtual { public abstract void Method1(string argument); public virtual void Method2(string argument) { if (argument == null) throw new ArgumentNullException(nameof(argument)); // …
Rozważ poniższy przykład. Każda zmiana wyliczenia ColorChoice wpływa na wszystkie podklasy IWindowColor. Czy wytryski powodują kruche interfejsy? Czy istnieje coś lepszego niż wyliczenie, które pozwala na większą elastyczność polimorficzną? enum class ColorChoice { Blue = 0, Red = 1 }; class IWindowColor { public: ColorChoice getColor() const=0; void setColor( const …
Jeśli rzucanie System.Exceptionjest uważane za tak złe, dlaczego nie zostało Exceptionwykonaneabstract ? W ten sposób nie będzie możliwe wywołanie: throw new Exception("Error occurred."); Wymusiłoby to użycie wyjątków pochodnych, aby podać więcej szczegółów na temat błędu, który wystąpił. Na przykład, gdy chcę podać niestandardową hierarchię wyjątków dla biblioteki, zwykle deklaruję abstrakcyjną …
Obecnie mam dwie klasy pochodzące, Ai B, że obaj mają równe wspólnego i próbuję ustalić, czy należy przejść do klasy podstawowej. Nigdy nie jest przywoływany z klasy podstawowej i powiedzmy, że jeśli w pewnym momencie drogi zostanie wyprowadzona inna klasa C, która nie ma _field1, to nie naruszono by zasady …
Ostatnio zacząłem owijać głowę wokół OOP i teraz jestem do tego stopnia, że im więcej czytam o różnicach między klasami abstrakcyjnymi i interfejsami, tym bardziej się mylę. Jak dotąd nie można utworzyć żadnej z nich. Interfejsy są mniej więcej strukturalnymi planami, które określają szkielet, a streszczenia są różne, ponieważ są …
Myślałem o tym i miałem pewne wątpliwości. Kiedy deklaruję interfejs, na przykład: public interface MyInterface { public void method1(); public void method2(); } Czy te metody interfejsu można uznać za abstrakcyjne? Mam na myśli to, że pojęcie metody abstrakcyjnej to: Metoda abstrakcyjna to metoda zadeklarowana, ale nie zawierająca implementacji. Czy …
Czy jest jakaś różnica między public class A extends AbstractB implements C {...} przeciw... public class A extends AbstractB {...} abstract class AbstractB implements C {...} Rozumiem, że w obu przypadkach klasa A będzie zgodna z interfejsem. W drugim przypadku AbstractBmoże zapewnić implementację metod interfejsu w C. Czy to jedyna …
W odpowiedziach na to pytanie, ogólny konsensus był taki, że metody statyczne nie mają być nadpisywane (a zatem funkcje statyczne w języku C # nie mogą być wirtualne ani abstrakcyjne). Jest to jednak nie tylko przypadek w języku C #; Java również tego zabrania, a C ++ też to nie …
Według Herb Suttera należy preferować abstrakcyjne interfejsy (wszystkie czyste funkcje wirtualne) niż abstrakcyjne klasy w C ++, aby oddzielić implementację tak dalece, jak to możliwe. Chociaż osobiście uważam tę zasadę za bardzo przydatną, ostatnio dołączyłem do zespołu z wieloma programistami Java i w kodzie Java ta wytyczna wydaje się nie …
Studiuję OOP w C ++ i chociaż jestem świadomy definicji tych 3 pojęć, tak naprawdę nie jestem w stanie zrozumieć, kiedy i jak go używać. Użyjmy tej klasy na przykład: class Person{ private: string name; int age; public: Person(string p1, int p2){this->name=p1; this->age=p2;} ~Person(){} void set_name (string parameter){this->name=parameter;} void set_age …
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.