Eine abstrakte Klasse ist eine Klasse, die nicht instanziiert werden kann. Sie sind im Allgemeinen als erweiterte / Unterklassen gedacht und haben im Allgemeinen "abstrakte Methoden", die von Unterklassen implementiert werden müssen.
"Abstrakte Klasse" und "Schnittstelle" sind ähnliche Konzepte, wobei die Schnittstelle die abstraktere der beiden ist. Ein entscheidender Faktor ist, dass abstrakte Klassen bei Bedarf Methodenimplementierungen für abgeleitete Klassen bereitstellen. In C # wurde dieser Differenzierungsfaktor jedoch durch die kürzliche Einführung von Erweiterungsmethoden reduziert, die es ermöglichen, Implementierungen für Schnittstellenmethoden bereitzustellen. …
Ich kenne die Syntax, die Regeln für abstrakte Klassen und möchte die Verwendung einer abstrakten Klasse kennen Abstrakte Klassen können nicht direkt instanziiert, sondern durch andere Klassen erweitert werden Was ist der Vorteil davon? Wie unterscheidet es sich von einem Interface? Ich weiß, dass eine Klasse mehrere Schnittstellen implementieren kann, …
Kann mir jemand im Detail erklären, wie genau die virtuelle Tabelle funktioniert und welche Zeiger beim Aufruf von virtuellen Funktionen zugeordnet sind. Wenn sie tatsächlich langsamer sind, können Sie dann anzeigen, dass die Ausführung der virtuellen Funktion mehr Zeit in Anspruch nimmt als normale Klassenmethoden? Es ist leicht, den Überblick …
Obwohl dies im C ++ - Standard nicht vorgeschrieben ist, sieht es so aus, als ob GCC beispielsweise übergeordnete Klassen, einschließlich rein abstrakter Klassen, implementiert, indem es in jeder Instanziierung der betreffenden Klasse einen Zeiger auf die v-Tabelle für diese abstrakte Klasse einfügt . Dies erhöht natürlich die Größe jeder …
Als C ++ - Entwickler bin ich an C ++ - Headerdateien gewöhnt und finde es vorteilhaft, eine Art erzwungene "Dokumentation" im Code zu haben. Normalerweise habe ich eine schlechte Zeit, wenn ich etwas C # -Code lesen muss: Ich habe keine solche mentale Karte der Klasse, mit der ich …
In den 2000er Jahren sagte mir ein Kollege, es sei ein Anti-Pattern, öffentliche Methoden virtuell oder abstrakt zu machen. Zum Beispiel hielt er eine Klasse wie diese für nicht gut designt: public abstract class PublicAbstractOrVirtual { public abstract void Method1(string argument); public virtual void Method2(string argument) { if (argument == …
Betrachten Sie das folgende Beispiel. Jede Änderung an der ColorChoice-Enumeration wirkt sich auf alle IWindowColor-Unterklassen aus. Neigen Aufzählungen dazu, spröde Schnittstellen zu verursachen? Gibt es etwas Besseres als eine Aufzählung, um mehr polymorphe Flexibilität zu ermöglichen? enum class ColorChoice { Blue = 0, Red = 1 }; class IWindowColor { …
Wenn das Werfen System.Exceptionso schlecht ist, warum wurde es dann überhaupt nicht Exceptiongemacht abstract? Auf diese Weise wäre es nicht möglich anzurufen: throw new Exception("Error occurred."); Dies würde die Verwendung abgeleiteter Ausnahmen erzwingen, um weitere Details zu dem aufgetretenen Fehler bereitzustellen. Wenn ich beispielsweise eine benutzerdefinierte Ausnahmehierarchie für eine Bibliothek …
Derzeit habe ich zwei abgeleitete Klassen, Aund Bbeide haben ein gemeinsames Feld, und ich versuche zu bestimmen, ob es in die Basisklasse aufgenommen werden soll. Es wird nie von der Basisklasse aus referenziert, und sagen Sie, wenn irgendwann auf der Straße eine andere Klasse abgeleitet wird C, die kein a …
Vor kurzem habe ich angefangen, mich mit OOP zu beschäftigen, und jetzt bin ich so weit, dass ich umso verwirrter werde, je mehr ich über die Unterschiede zwischen abstrakten Klassen und Schnittstellen lese. Bisher kann keiner von beiden instanziiert werden. Schnittstellen sind mehr oder weniger strukturelle Entwürfe, die das Gerüst …
Ich dachte darüber nach und hatte einige Zweifel. Wenn ich eine Schnittstelle deklariere, zum Beispiel: public interface MyInterface { public void method1(); public void method2(); } Könnten diese Schnittstellenmethoden als abstrakt angesehen werden? Was ich meine ist, dass das Konzept einer abstrakten Methode ist: Eine abstrakte Methode ist eine deklarierte …
Gibt es einen Unterschied zwischen public class A extends AbstractB implements C {...} gegen... public class A extends AbstractB {...} abstract class AbstractB implements C {...} Ich verstehe, dass Klasse A in beiden Fällen der Schnittstelle entspricht. Im zweiten Fall AbstractBkann die Implementierung für Schnittstellenmethoden in bereitgestellt werden C. Ist …
Bei der Beantwortung dieser Frage herrschte allgemeiner Konsens darüber, dass statische Methoden nicht überschrieben werden sollen (und statische Funktionen in C # daher nicht virtuell oder abstrakt sein können). Dies ist jedoch nicht nur in C # der Fall. Java verbietet dies auch und C ++ scheint es auch nicht …
Laut Herb Sutter sollte man abstrakte Interfaces (alle rein virtuellen Funktionen) abstrakten Klassen in C ++ vorziehen, um die Implementierung so weit wie möglich zu entkoppeln. Obwohl ich diese Regel persönlich sehr nützlich finde, bin ich kürzlich einem Team mit vielen Java-Programmierern beigetreten, und im Java-Code scheint diese Richtlinie nicht …
Ich lerne OOP in C ++ und obwohl mir die Definitionen dieser 3 Konzepte bekannt sind, kann ich nicht wirklich erkennen, wann oder wie ich es verwenden soll. Verwenden wir diese Klasse für das Beispiel: class Person{ private: string name; int age; public: Person(string p1, int p2){this->name=p1; this->age=p2;} ~Person(){} void …
We use cookies and other tracking technologies to improve your browsing experience on our website,
to show you personalized content and targeted ads, to analyze our website traffic,
and to understand where our visitors are coming from.
By continuing, you consent to our use of cookies and other tracking technologies and
affirm you're at least 16 years old or have consent from a parent or guardian.