C++ Mehrfachvererbung mit interfaces?

Grüße alle,

Ich komme aus der Java-hintergrund und ich habe Schwierigkeiten mit Mehrfachvererbung.

Ich habe ein interface namens IView die init () - Methode.Ich will leiten Sie eine neue Klasse namens PlaneViewer Implementierung der obigen Schnittstelle und erweitern eine andere Klasse. (QWidget).

Meine Implementierung ist als:

IViwer.h (nur Header-Datei , keine CPP-Datei) :

#ifndef IVIEWER_H_
#define IVIEWER_H_

class IViewer
{
public:
  //IViewer();
  ///virtual
  //~IViewer();
  virtual void init()=0;
};

#endif /* IVIEWER_H_ */

Meine abgeleitete Klasse.

PlaneViewer.h

#ifndef PLANEVIEWER_H
#define PLANEVIEWER_H

#include <QtGui/QWidget>
#include "ui_planeviewer.h"
#include "IViewer.h"
class PlaneViewer : public QWidget , public IViewer
{
    Q_OBJECT

public:
    PlaneViewer(QWidget *parent = 0);
    ~PlaneViewer();
    void init(); //do I have to define here also ?

private:
    Ui::PlaneViewerClass ui;
};

#endif //PLANEVIEWER_H

PlaneViewer.cpp

#include "planeviewer.h"

PlaneViewer::PlaneViewer(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
}

PlaneViewer::~PlaneViewer()
{

}

void PlaneViewer::init(){

}

Meine Fragen sind:

  1. Ist es notwendig zu erklären, die Methode init() in PlaneViewer-Schnittstelle auch , denn es ist bereits definiert, die in IView?

2.Ich kann nicht complie obigen code Fehler geben :

PlaneViewer]+0x28): undefined reference to `Typinformation für IViewer'
collect2: ld zurückgegeben, 1 exit status

Muss ich haben-Implementierung für IView in der CPP Datei (weil alles was ich will ist eine Schnittstelle,nicht die Implementierung) ?

Darf ich Fragen, über Ihr design? Warum brauchen Sie, um zusammen zu binden QWidget und IViewer in der gleichen Vererbungshierarchie? Welches problem versuchen Sie zu lösen mit Mehrfachvererbung? Ich Frage, weil die mehrfache Vererbung ist nützlich, eine ein paar seltenen Situationen aber oft Probleme werden besser gelöst, in einer anderen Weise.
In meiner Anwendung gibt es mehrere Arten die Zuschauer, die teilen sich die selben Daten.(3D-voxel-Daten).Eg: der 2D-Viewer (XY-Ebene,YZ-Ebene,ZX-Ebene) und ein 3D-viewer.Und in Zukunft gibt es noch einige Zuschauer mehr. QWiget ist die Verwendung der Zeichnung und Darstellung von Daten. IView ist eine abstrakte Klasse/interface declare-Befehl Methoden und Daten für alle Arten von Zuschauern.

InformationsquelleAutor Ashika Umanga Umagiliya | 2010-06-11

Schreibe einen Kommentar