Frage

Ich war in einem Interview gefragt, was mit einer Klassendeklaration in C die Verwendung von virtuellem Schlüsselwort ++, und ich antwortete, dass virtuelles Schlüsselwort kann nicht mit einer Klassendeklaration in C ++ verwendet werden. Der Interviewer sagte, dass es möglich ist, und hat mich gebeten, es später zu testen.

Nun, da ich es selbst geprüft habe bin ich gekommen, zu wissen, dass dies möglich ist, und dies ist kein Compiler-Fehler. In der Tat, wenn ich etwas tun, wie dies mit einer Visual C ++ Compiler:

virtual class Test
{
   int i;
};

Ich erhalte eine Compiler-Warnung „C4091 Warnung:‚virtuellen‘: ignoriert auf der linken Seite von‚Test‘, wenn keine Variable deklariert wird“. Ich habe nicht in der Lage gewesen, noch herausfinden, dass das, was diese Warnmittel und weiter, was die Verwendung von virtuellem Schlüsselwort ist. Wenn es keine hilfreich Nutzung ist, dann, warum dies in erster Linie erlaubt ist und warum ist dies keine Compiler-Fehler.

War es hilfreich?

Lösung

Das ist ein Fehler in VC ++. Comeau und gcc beide lehnen den Code.

Andere Tipps

virtuelle kann verwendet werden, wenn sie von einer anderen Klasse abgeleitet:

class Foo : public virtual Bar
{
}

Dies wird verwendet, um mehrere Versionen der gleichen Basisklasse zu vermeiden, wenn Mehrfachvererbung. Wikipedia zu diesem Thema einen guten Artikel hat.

Sie können einfach nicht für eine Klasse virtuell verwenden. Es funktioniert nur für Member-Funktionen

Sie befinden sich in der falschen Art der Nutzung suchen - ich bin mir ziemlich sicher, dass der Interviewer auf virtuelle Basisklasse Erklärungen bezog, etwa so:

  class A : virtual public B, public C {
    ...
  };

Dies ist ein gemeinsames Idiom und verwendet um die „multiple Basisklasse“ -Szenario in rautenförmigen Erbe Bäume zu erhalten. Das typische Problem mit ihnen ist, dass Sie sowohl von Klasse B und Klasse C erben und sie teilen sich den gemeinsamen Vorfahren A. Wenn Sie den Vererbungsbaum gehen ‚up‘ Sie die Mehrdeutigkeit getroffen werden, wie, auf die Instanz von ‚A‘ du bist angeblich zu verwenden. Wenn B & C statt A als virtuelle Basisklasse hat, werden sie auf die gleiche Instanz von A beziehen, die dieses Problem löst.

Sie können eine ausführlichere Beschreibung mit Klassendiagrammen hier .

Vielleicht ist er bezog sich auf virtuelle Vererbung / virtuellen Basisklassen? Z.

class A : virtual public B
{ ... }

Das wäre technisch Teil der Klassendefinition sein.

Könne er gesprochen hat eine virtuelle Basisklasse in der Klassendeklaration über die Verwendung von?

Wie folgt aus:

class CashierQueue : virtual public Queue {};

Diese in Mehrfachvererbung verwendet, wenn Sie eine abgeleitete Klasse mit mehreren Kopien der Mitgliederdaten vermeiden wollen, wenn es von zwei oder mehr Klassen erbt, die die gleiche Basisklasse teilen.

class Queue {};
class CashierQueue : virtual public Queue {};
class LunchQueue : virtual public Queue {};
class LunchCashierQueue : public LunchQueue, public CashierQueue {};

Siehe http://msdn.microsoft.com /en-us/library/wcz57btd(VS.80).aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top