Was ist der Unterschied zwischen einer abstrakten Funktion und einer virtuellen Funktion? In welchen Fällen wird die Verwendung von virtuell oder abstrakt empfohlen? Welcher ist der beste
Bei der objektorientierten Programmierung ist eine virtuelle Funktion oder virtuelle Methode eine Funktion oder Methode, deren Verhalten innerhalb einer ererbenden Klasse von einer Funktion mit derselben Signatur überschrieben werden kann. Dieses Konzept ist ein sehr wichtiger Bestandteil des Polymorphismus-Teils der objektorientierten Programmierung (OOP).
Was ist der Unterschied zwischen einer abstrakten Funktion und einer virtuellen Funktion? In welchen Fällen wird die Verwendung von virtuell oder abstrakt empfohlen? Welcher ist der beste
Ich lerne C ++ und steige gerade in virtuelle Funktionen ein. Nach dem, was ich gelesen habe (im Buch und online), sind virtuelle Funktionen Funktionen in der Basisklasse, die Sie in abgeleiteten Klassen überschreiben können. Aber früher in diesem Buch konnte ich beim Erlernen der grundlegenden...
Angenommen, ich habe Unterricht Foound bin so Bareingerichtet: 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...
Ich habe gehört, dass Vorlagen für C ++ - Klassenmitgliedsfunktionen nicht virtuell sein können. Ist das wahr? Wenn sie virtuell sein können, was ist ein Beispiel für ein Szenario, in dem man eine solche Funktion verwenden
Soweit ich weiß, die Einführung von override Schlüsselworts in C ++ 11 nichts anderes als eine Überprüfung, um sicherzustellen, dass die implementierte Funktion die Funktion overrideeiner virtualFunktion in der Basisklasse ist. Ist es
Mit der unten angegebenen Strukturdefinition ... struct A { virtual void hello() = 0; }; Ansatz 1: struct B : public A { virtual void hello() { ... } }; Ansatz 2: struct B : public A { void hello() { ... } }; Gibt es einen Unterschied zwischen diesen beiden Möglichkeiten, die...
Ich habe diese Frage erhalten, als ich einen Kommentar zur Codeüberprüfung erhielt, der besagt, dass virtuelle Funktionen nicht inline sein müssen. Ich dachte, virtuelle Inline-Funktionen könnten in Szenarien nützlich sein, in denen Funktionen direkt für Objekte aufgerufen werden. Aber das...
Ist es möglich, virtuelle Methoden in Java zu schreiben , wie dies in C ++ der Fall wäre? Oder gibt es einen geeigneten Java-Ansatz, den Sie implementieren können und der ein ähnliches Verhalten erzeugt? Könnte ich bitte einige Beispiele
In meinem Klassendesign verwende ich häufig abstrakte Klassen und virtuelle Funktionen. Ich hatte das Gefühl, dass virtuelle Funktionen die Leistung beeinflussen. Ist das wahr? Aber ich denke, dieser Leistungsunterschied ist nicht spürbar und sieht so aus, als würde ich vorzeitig optimieren....
Wir alle wissen, was virtuelle Funktionen in C ++ sind, aber wie werden sie auf einer tiefen Ebene implementiert? Kann die vtable zur Laufzeit geändert oder sogar direkt aufgerufen werden? Existiert die vtable für alle Klassen oder nur für diejenigen, die mindestens eine virtuelle Funktion haben?...
C # -Methoden in Schnittstellen werden ohne Verwendung des virtualSchlüsselworts deklariert und in der abgeleiteten Klasse ohne Verwendung des overrideSchlüsselworts überschrieben . Gibt es einen Grund dafür? Ich gehe davon aus, dass dies nur eine Annehmlichkeit für die Sprache ist, und...
Manchmal stelle ich fest, dass Programme auf meinem Computer mit dem Fehler "reiner virtueller Funktionsaufruf" abstürzen. Wie kompilieren diese Programme überhaupt, wenn ein Objekt nicht aus einer abstrakten Klasse erstellt werden
Wenn mindestens eine virtuelle Methode in einer C ++ - Klasse (oder einer ihrer übergeordneten Klassen) vorhanden ist, verfügt die Klasse über eine virtuelle Tabelle und jede Instanz über einen virtuellen Zeiger. Die Speicherkosten sind also ziemlich klar. Am wichtigsten sind die Speicherkosten für...
Warum behandelt C # Methoden im Gegensatz zu Java standardmäßig als nicht virtuelle Funktionen? Ist es eher ein Leistungsproblem als andere mögliche Ergebnisse? Ich erinnere mich daran, einen Absatz von Anders Hejlsberg über einige Vorteile der bestehenden Architektur gelesen zu haben. Aber was ist...
Ich habe eine Basisklasse mit einer virtuellen Funktion und möchte diese Funktion in einer abgeleiteten Klasse überschreiben. Gibt es eine Möglichkeit, den Compiler überprüfen zu lassen, ob die in der abgeleiteten Klasse deklarierte Funktion tatsächlich eine Funktion in der Basisklasse...
Gibt es jemals einen guten Grund , einen virtuellen Destruktor für eine Klasse nicht zu deklarieren? Wann sollten Sie es ausdrücklich vermeiden, eine zu
Ich kenne virtuelle Methoden aus PHP oder Java. Wie können sie in Python implementiert werden? Oder muss ich eine leere Methode in einer abstrakten Klasse definieren und überschreiben?
Kann eine geerbte Klasse eine virtuelle Funktion mit einem anderen Rückgabetyp implementieren (ohne eine Vorlage als Rückgabe zu verwenden)?
In Java können Sie die Methode als endgültig markieren, um ein Überschreiben zu verhindern. In C # müssen Sie die Methode als virtuell markieren , es zu machen möglich außer Kraft zu setzen. Bedeutet dies, dass Sie in C # alle Methoden als virtuell markieren sollten (mit Ausnahme einiger...
In diesem Beispiel werden Klassen Foound Baraus einer Bibliothek bereitgestellt. Meine Klasse Bazerbt von beiden. struct Foo { void do_stuff (int, int); }; struct Bar { virtual void do_stuff (float) = 0; }; struct Baz : public Foo, public Bar { void func () { do_stuff (1.1f); // ERROR HERE...