Statische Variablen in der statischen Methode in der Basisklasse und Vererbung

8

Ich habe diese C ++ - Klassen:

%Vor%

Wird die x statische Variable zwischen A und B geteilt, oder wird jede von ihnen ihre eigene unabhängige x Variable haben (was ich will)?

    
Meh 29.04.2010, 11:52
quelle

6 Antworten

14

Es wird nur eine Instanz von x im gesamten Programm geben. Ein nettes Problem ist die Verwendung des CRTP :

%Vor%

Dadurch wird für jede davon abgeleitete Klasse ein anderes Base<T> und damit ein eindeutiges x erstellt.

Sie können auch eine "Basen" -Basis benötigen, um den Polymorphismus beizubehalten, wie Neil und Akanksh darauf hinweisen.

    
Marcelo Cantos 29.04.2010, 11:54
quelle
3

Es wird nur eins geben, das von allen drei Klassen geteilt wird. Wenn Sie separate Instanzen benötigen, müssen Sie separate Funktionen in den abgeleiteten Klassen erstellen.

    
anon 29.04.2010 11:55
quelle
3

Ich bin mir ziemlich sicher, dass es zwischen A und B geteilt wird.

Wenn Sie unabhängige Variablen haben möchten, können Sie das "Seltsam wiederkehrende Template Pattern" wie folgt verwenden:

%Vor%

Natürlich, wenn Sie Polymorphismus wollen, müssten Sie eine gerade "Basis" -Klasse definieren, von der Base abgeleitet ist, da Base<A> sich von Base<B> like:

unterscheidet %Vor%

Jetzt können A und B auch polymorph sein.

    
Akanksh 29.04.2010 11:58
quelle
2

Ersteres. Lokale statische Variablen sind an die Methode gebunden, die sie enthält, und method existiert in einer Inkarnation für alle Unterklassen (in der Tat für die gesamte App, obwohl der Rest des Programms die Methode nicht sieht).

    
Péter Török 29.04.2010 11:55
quelle
1

Die Variable wird geteilt - es ist pro-Funktion - in diesem Fall ist die Funktion, zu der sie gehört, Base::method() . Wenn jedoch class Base eine Vorlagenklasse ist, erhalten Sie eine Instanz der Variablen für jede Instanziierung (jede eindeutige Menge von tatsächlichen Vorlagenparametern) von class Base template - jede Instanziierung ist eine neue Funktion.

    
sharptooth 29.04.2010 11:56
quelle
1

Wenn Sie X als statisch definieren, wird es unter allen untergeordneten Klassen geteilt. Keine Probleme mit der Funktion statisch.

    
GJ. 29.04.2010 11:57
quelle