mikrocontroller.net

Forum: PC-Programmierung OOP: statische Klasse erbt etwas.


Autor: Sven Scholz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Gemeinde.
Ich habe eine kurze Verständnisfrage bzgl. Vererbung in C++:

Ich habe eine statsiche Klasse, die von einer "normalen" Klasse deren 
Member erbt... (siehe Pseudo-Code unten)

Sind dann diese geerbten Member automatisch statisch bzw. wird sofort 
Speicherplatz für diese Funktion "verbraucht" (early binding)?

Vielen herzlichen Dank und viele Grüße...

// Nicht-statische Klasse
class cAnotherClass{
  public:
     void init(void);
     void set(void);
     void get(void);
     cAnotherClass();
     ~cAnotherClass();
};

// Statische Klasse
class cStaticClass : public cAnotherClass{
  public:
    static STATUS func1(void);
    static STATUS func2(void);
    static STATUS func3(void);
  private:
    cStaticClass();
    ~cStaticClass();
};

Autor: Sven Scholz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag:

Können statische Klassen überhaupt etwas erben oder ist das total 
Quatsch?

Autor: Stefan Hennig (stefanhennig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht dass es m.W. sowas wie statische Klassen gäbe, aber die von Dir 
beschriebene Vererbung ist natürlich möglich. Bloß können Deine 
statischen Methoden natürlich keine nicht-statischen Methoden verwenden.

Ich nehme mal an, dass Du mit "Statische Klasse" eine Klasse meinst, die 
das Singleton-Entwurfsmuster verwendet? Das wäre natürlich etwas 
anderes, denn dort gibt es ja (genau) eine Instanz, die dann auch die 
von Dir beschriebenen geerbten Methoden verwenden kann.

Die Frage ist also, was Du konkret willst, aber eigentlich ist C++ da 
mal zur Abwechslung konsistent. Methoden, die einen this-Pointer 
brauchen, kannst Du nicht aus Methoden aufrufen, die keinen haben. Mehr 
gibts da eigentlich nicht zu wissen.

Viele Grüße,
  Stefan

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven Scholz schrieb:

> Können statische Klassen überhaupt etwas erben oder ist das total
> Quatsch?


Das was du als 'statische Klasse' bezeichnest, ist nur für dich 
relevant. Für den Compiler spielt es keine Rolle, ob deine Klasse nur 
statische Member hat oder nicht. Für den ist Klasse einfach nur Klasse. 
Das einzige was den interessiert ist, ob es eine oder mehrere pure 
Member darin gibt, denn dann kann kein Objekt davon instanziiert werden. 
Aber ansonsten ist ihm egal, was du in deiner Klasse hast.
Rufst du aus einer Klasse einen nicht statischen Member auf, dann musst 
du das über ein Objekt machen, eine statische Memberfunktion benötigt 
kein Objekt, weil sie ja nicht auf einem Objekt arbeitet.

Aber es ist nicht so, dass eine Klasse mit nur statischen Membern 
irgendeine Sonderbedeutung für den Compiler hätte.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und die Sonderbedeutung hat es nicht mal für den
Programmierer, wenn man in der abgeleiteten Klasse
automatisch die nicht-statischen Methoden der Basisklasse
erbt.
Die kann man ja nicht mehr wegdefinieren, höchstens verdrängen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.