Pytania otagowane jako abstract-class

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.

7
Kiedy używać klas abstrakcyjnych zamiast interfejsów z metodami rozszerzenia w C #?
„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ą …


4
W C ++ dlaczego i jak działają funkcje wirtualne?
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, …



3
Nigdy nie udostępniaj publicznie elementów wirtualnych / abstrakcyjnych - naprawdę?
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)); // …

5
Czy wyliczenia tworzą kruche interfejsy?
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 …

2
Super typ wyjątku abstrakcyjnego
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ą …


6
Jakie są różnice między klasami abstrakcyjnymi, interfejsami i kiedy z nich korzystać
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ą …




4
Czy istnieje inne uzasadnienie użycia abstrakcyjnych klas / interfejsów w C ++ i Javie
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 …

7
Jakie są role singletonów, klas abstrakcyjnych i interfejsów?
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 …

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.