Forum: PC-Programmierung C++ Klassendeklaration


von Lothar (Gast)


Lesenswert?

In dieser C++ Klassendeklaration, was bedeutet das zwischen "class 
GraphWindow:" und der ersten "{"? Das sind andere Klassen, aus denen die 
gelisteten virtual Funktionen kommen. Aber "class GraphWindow" ist damit 
keine abgeleitete Klasse so wie hier erklärt - denn die virtual 
Funktionen werden erst "ausserhalb" befüllt??

https://www.geeksforgeeks.org/virtual-function-cpp/

class GraphWindow:
  public tbx::AutoCreateListener,
  public tbx::AboutToBeShownListener,
  public tbx::RedrawListener,
  public tbx::Command,
  public tbx::SliderValueChangedListener,
  public tbx::Timer
{
  private:
  tbx::Window _window;
  tbx::ActionButton _action;
  tbx::DisplayField _disp_left;
  tbx::DisplayField _disp_right;
  tbx::Slider _slider;

  public:
  virtual void auto_created(std::string template_name, tbx::Object 
object);
  virtual void about_to_be_shown(tbx::AboutToBeShownEvent &e);
  virtual void redraw(const tbx::RedrawEvent &e);
  virtual void execute();
  virtual void slider_value_changed(const tbx::SliderValueChangedEvent 
&e);
  virtual void timer(unsigned int elapsed);
};

void GraphWindow::auto_created(std::string template_name, tbx::Object 
object)
{
  ...
}

int main()
{
  ...
  GraphWindow handler;
  app.set_autocreate_listener("Window", &handler);
  app.run();
  ...
}

von Experte (Gast)


Lesenswert?

Lothar schrieb:
> Aber "class GraphWindow" ist damit
> keine abgeleitete Klasse

Doch "GraphWindow" ist eine abgeleitete Klasse. Von insgesamt 6 
Basisklassen.


Lothar schrieb:
> denn die virtual
> Funktionen werden erst "ausserhalb" befüllt??

Das spielt keine Rolle. Das ist sogar der Normalfall. Es ist egal, wo 
die eine Methode implementiert wird (vereinfacht gesagt).

von BobbyX (Gast)


Lesenswert?

Lothar schrieb:

> class GraphWindow:
>   public tbx::AutoCreateListener,
>   public tbx::AboutToBeShownListener,
>   public tbx::RedrawListener,
>   public tbx::Command,
>   public tbx::SliderValueChangedListener,
>   public tbx::Timer

Wer auch immer sich das ausgedacht hat, der sollte nie wieder eine Zeile 
Code schreiben dürfen. ;-)

von cppbert3 (Gast)


Lesenswert?

BobbyX schrieb:
> Lothar schrieb:
>
>> class GraphWindow:
>> public tbx::AutoCreateListener,
>> public tbx::AboutToBeShownListener,
>> public tbx::RedrawListener,
>> public tbx::Command,
>> public tbx::SliderValueChangedListener,
>> public tbx::Timer
>
> Wer auch immer sich das ausgedacht hat, der sollte nie wieder eine Zeile
> Code schreiben dürfen. ;-)

Das ist so richtig alte "alles-OOP-Interfaces-Orgie" Denke, wird der 
Stil nicht mittlerweile mit Freiheitsstrafe geahndet?

früher so in den 80/90 Jahren dachten viele das wäre der beste Stil, hat 
jahrzehnte gedauert bis so was nicht mehr cool war

Heute wird alles mit lockerer Kopplung und mehr Komposits gelöst

von Lothar (Gast)


Lesenswert?

cppbert3 schrieb:
> Heute wird alles mit lockerer Kopplung und mehr Komposits gelöst

Könntest Du das bitte mal zeigen an dem Beispiel?

von P. S. (namnyef)


Lesenswert?

Das kommt dabei heraus, wenn die eigentliche Idee von OOP zum 
Selbstzweck verkommt.

von Rolf M. (rmagnus)


Lesenswert?

Lothar schrieb:
> In dieser C++ Klassendeklaration,

Es handelt sich um eine Klassendefinition.

> was bedeutet das zwischen "class GraphWindow:" und der ersten "{"?

Das sind die Basisklassen, von denen GraphWindow abgeleitet ist, womit 
das hier:

> Aber "class GraphWindow" ist damit keine abgeleitete Klasse so wie hier
> erklärt

Quatsch ist.

von BobbyX (Gast)


Lesenswert?

cppbert3 schrieb:

> früher so in den 80/90 Jahren dachten viele das wäre der beste Stil, hat
> jahrzehnte gedauert bis so was nicht mehr cool war

Das hat nicht viel mit Stil oder Coolness zu tun, sondern mit niedrigen 
IQ Werten der Programmier verbunden mit Dogmatismus. Sie sind eben nicht 
in der Lage die Zusammenhänge und Relationen richtig zu erkennen und 
umzusetzen, und versuchen dann das mit blindem Glauben zu 
bewerkstelligen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.