Announcement

Collapse
No announcement yet.

Polymorphie mal anders?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Polymorphie mal anders?

    Hallo,
    ich muss mehere inhaltlich unterschiedliche dbase4 dateien einlesen und in eine MySQL Datenbank importieren.

    Hierzu habe ich für jede Datei eine Klasse geschrieben. Die alle von einer rein virtuellen Basisklasse geerbt haben.

    Um nicht in jeder Klasse eine Methode zu haben welche die Dateispezifischen Methoden aufruft und ev. Ausnahmen behandelt möchte ich eine control Klasse schreiben die diese Aufgabe übernimmt.

    Das ist normalerweise mit polymorphie zu erschlagen. Es stört mich nur das ja dann alle Methoden die die contolklasse aufrufen muss public sein müssen.

    Gibts da nicht eine andere Möglichkeit?
    Attached Files

  • #2
    protected sollte helfen
    Christian

    Comment


    • #3
      Das würde gehen wenn die Control Klasse von allen dateispezifischen Klassen erben würde. Dann müsste ich aber doch trotzdem für jede dateispezifische Klasse eine Control Methode screiben oder?
      control:MainClassX()
      {
      x::ReadFile();
      x::InsertinDb();
      }

      Code:
      control:MainClassX()
      {
         x::ReadFile();
         x::InsertinDb();
      }
      control:MainClassY()
      {
         y::ReadFile();
         y::InsertinDb();
      }
      Mein Ziel ist es sozusagen Objekte der Klassen x, y, z, zu erzeugen und sie der control Klasse zu übergeben. Etwa so:
      Code:
      class control : public basic
      {
      public:
         void manage( basic *pobjBasic)
         {
            pobjBasic->ReadFile();
            pobjBasic->InsertinDb();
         }
      }
      
      void main()
      {
        x objX; //hat von klasse basic die virtuellen funktionen geerbt und implementiert
        y objY;//hat von klasse basic die virtuellen funktionen geerbt und implementiert
        control objControl;
      
        objControl(&x);
        objControl(&y);
      }

      Comment


      • #4
        Das kannst du so machen. Lediglich der Aufruf in manage läuft dann so nicht. Du kannst beispielsweise bis in die Methode mit void-Zeigern arbeiten und in der Methode die void-Zeiger auf ihre Objekte casten

        wenn ich das richtig verstehe....
        Christian

        Comment

        Working...
        X