 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Carsten Breuer Guest
|
Posted: Mon Jun 21, 2004 8:19 pm Post subject: Vererbung von statischen Variablen/Methoden |
|
|
Hallo,
ich muß mit in einem Projekt mitarbeiten, und bin auf folgendes Problem
gestoßen.
Ich muß von einer Klasse ableiten, die statische Elemente enthält, die
in einer statischen Methode belegt werden. Nun brauche ich einige von
den statische Veriablen dieser Basisklasse. Ich kann sie auch in einer
Instanz meiner abgeleiteten Klasse direkt ansprechen, sogar die Werte,
die ich der Basisklasse statisch zugewiesen habe. Nun meine Frage, sind
das Kopien der Werte der Basisklasse, oder direkt die Werte. Was
passiert, wenn ich welche davon ändere?
Vielen Dank schon jetzt ...
Grüße
Carsten
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Markus Breuer Guest
|
Posted: Tue Jun 22, 2004 5:13 am Post subject: Re: Vererbung von statischen Variablen/Methoden |
|
|
Carsten Breuer schrieb:
| Quote: | Hallo,
ich muß mit in einem Projekt mitarbeiten, und bin auf folgendes Problem
gestoßen.
Ich muß von einer Klasse ableiten, die statische Elemente enthält, die
in einer statischen Methode belegt werden. Nun brauche ich einige von
den statische Veriablen dieser Basisklasse. Ich kann sie auch in einer
Instanz meiner abgeleiteten Klasse direkt ansprechen, sogar die Werte,
die ich der Basisklasse statisch zugewiesen habe. Nun meine Frage, sind
das Kopien der Werte der Basisklasse, oder direkt die Werte. Was
passiert, wenn ich welche davon ändere?
|
Statische Variablen in einer Klasse gibt es genau einmal. Völlig
unabhängig davon, wie oft du die Klasse ableitest, es gibt immer nur
eine Variable je Definition. Warum, das kannst du dir einfach klar machen:
class Foo {
// definition
static int bar;
};
// deklaration
int Foo::bar = 0;
Du hast die Variable genau einmal deklariert. Wenn du ableitest, änderst
du an dieser Tatsache nichts.
Gruß Markus
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Carsten Breuer Guest
|
Posted: Tue Jun 22, 2004 6:38 pm Post subject: Re: Vererbung von statischen Variablen/Methoden |
|
|
Hallo Markus!
Markus Breuer schrieb:
| Quote: | Statische Variablen in einer Klasse gibt es genau einmal. Völlig
unabhängig davon, wie oft du die Klasse ableitest, es gibt immer nur
eine Variable je Definition. Warum, das kannst du dir einfach klar machen:
class Foo {
// definition
static int bar;
};
// deklaration
int Foo::bar = 0;
Du hast die Variable genau einmal deklariert. Wenn du ableitest, änderst
du an dieser Tatsache nichts.
|
Ja schon, aber wieso hat meine abgeleitete Klasse dieselben Werte wie
die Basisklasse, immerhin ist es doch eine eigene Klasse. Warum bekommt
sie bei den statischen Variablen nicht auch eigene? Oder ist das
compilerspezifisch?
Grüße Carsten
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Rolf Magnus Guest
|
Posted: Tue Jun 22, 2004 10:22 pm Post subject: Re: Vererbung von statischen Variablen/Methoden |
|
|
Carsten Breuer wrote:
| Quote: | Hallo Markus!
Markus Breuer schrieb:
Statische Variablen in einer Klasse gibt es genau einmal. Völlig
unabhängig davon, wie oft du die Klasse ableitest, es gibt immer nur
eine Variable je Definition. Warum, das kannst du dir einfach klar
machen:
class Foo {
// definition
static int bar;
};
// deklaration
int Foo::bar = 0;
Du hast die Variable genau einmal deklariert. Wenn du ableitest,
änderst du an dieser Tatsache nichts.
Ja schon, aber wieso hat meine abgeleitete Klasse dieselben Werte wie
die Basisklasse, immerhin ist es doch eine eigene Klasse.
|
Weil der Wert von der Basisklasse geerbt wird. Du hast genau eine
Variable definiert und bekommst auch genau eine.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Helmut Zeisel Guest
|
Posted: Wed Jun 23, 2004 12:04 pm Post subject: Re: Vererbung von statischen Variablen/Methoden |
|
|
Carsten Breuer wrote:
| Quote: | Ja schon, aber wieso hat meine abgeleitete Klasse dieselben Werte wie
die Basisklasse, immerhin ist es doch eine eigene Klasse. Warum bekommt
sie bei den statischen Variablen nicht auch eigene?
|
Weil es so im Standard definiert ist.
| Quote: | Oder ist das
compilerspezifisch?
|
Nein. Aber wenn Du es anders willst, gibt es diverse Moeglichkeiten,
diesen Effekt zu erreichen.
Generell sind statische Membervariablen sowieso problematisch, da sie
unnötige Header-Abhanegigkeiten erzeugen. Wenn Deine Klasse in einer
einzigen Datei implementiert ist, ist eine Variable in Dateiscope oft
eine bessere Loesung.
Beispiel: "static int A: " durch lokale Variable erstzen.
===============
// Datei a.h
class A
{
....
static int getX(); // nach Bedarf auch virtual sttatt static
};
===============
//Datei a.cxx
namespace
{
int x=12;
}
#include "a.h"
int A::getX() {return x;}
===============
// Datei b.h
#include "a.h"
class B: public A
{
....
static int getX(); // Kann auf ein b.x zugreifen.
}
===============
// Datei b.cxx
namespace
{
int x=25;
}
#include "b.h"
int B::getX() {return x;}
===============
Helmut
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|