What does `class HelloWorld : public Gtk::Window`

2020-04-17 08:02发布

问题:

I'm following the Gtk "Hello World" tutorial found here, and I've come across a line in a class declaration I've never seen before (I've only been learning to program for a few months now), and I was wondering if someone could please explain it to me. The line is the

class HelloWorld : public Gtk::Window

I know what class HelloWorld is doing, but I've never seen the public Gtk::Window before. The full header file is provided for reference.

#ifndef GTKMM_EXAMPLE_HELLOWORLD_H
#define GTKMM_EXAMPLE_HELLOWORLD_H

#include <gtkmm/button.h>
#include <gtkmm/window.h>

class HelloWorld : public Gtk::Window
{

public:
  HelloWorld();
  virtual ~HelloWorld();

protected:
  //Signal handlers:
  void on_button_clicked();

  //Member widgets:
  Gtk::Button m_button;
};

#endif // GTKMM_EXAMPLE_HELLOWORLD_H

回答1:

It means that HelloWorld is derived from Gtk::Window, so it inherits its behaviour.

HelloWorld represents a Gtk window, so it is just natural to have it derive from the Gtk's window class. It's constructor will probably add a button to the window (the actual window is created by the parent class constructor, which is invoked automatically when a new instance of HelloWorld is created …) and connect a signal handler (on_button_clicked) to the window.

You can call all of Gtk::Window's methods through an instance of HelloWorld. In turn, HelloWorld can override virtual methods of Gtk::Window to change its behaviour.



回答2:

class HelloWorld : public Gtk::Window

This means the class HelloWorld is publically derived from class Window defined inside Gtk namespace. Gtk::Window is the fully qualified name of that class.



回答3:

I just want to point out that you should either be using the 3.0 branch of gtkmm or you should use the stable branch of the tutorial.link text

The 3.0 branch of gtkmm is still under development, and you should expect a few "surprises" now and then.



标签: c++ class