C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Vererbung von statischen Variablen/Methoden

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Carsten Breuer
Guest





PostPosted: Mon Jun 21, 2004 8:19 pm    Post subject: Vererbung von statischen Variablen/Methoden Reply with 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?

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





PostPosted: Tue Jun 22, 2004 5:13 am    Post subject: Re: Vererbung von statischen Variablen/Methoden Reply with quote



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





PostPosted: Tue Jun 22, 2004 6:38 pm    Post subject: Re: Vererbung von statischen Variablen/Methoden Reply with quote



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





PostPosted: Tue Jun 22, 2004 10:22 pm    Post subject: Re: Vererbung von statischen Variablen/Methoden Reply with quote

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





PostPosted: Wed Jun 23, 2004 12:04 pm    Post subject: Re: Vererbung von statischen Variablen/Methoden Reply with quote

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:Mad" 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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.