tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Matthias Reitinger
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
898
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Orbit
    Orbit Orbit ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Beiträge
    175
    Moin,

    folgendes Problem:
    Eine Klasse A wird beliebig oft vererbt (an B, C, und D ... ) soll aber diese Klassen nicht kennen müssen, dies wäre extrem umständlich.
    In Klasse A soll es nun eine statische Liste geben, in die jede Subklasse beim Start ihren Senf einträgt (zum Besipiel ein QAction dass beim Aufruf ein Fentser (A erbt von QWidget) aus der jeweiligen Klasse öffnet).
    Ist auch egal, es soll jedenfalls etwa so ausseheen, dass es eine virtuelle Methode in jeder Klasse gibt "register", A beim Start einmal für jede Subklasse "register" ausführt und somit die Liste in A gefüllt wird.
    Ich meine NICHT, dass jede Klasse im Konstruktor ihren Teil in die Liste schreibt; das kann ich selber da wäre ja das Problem dass ich von jeder Subklasse erst ein Objekt erstellen müsste.

    Gibt es da in Qt 4.5 irgendeine Variante das zu tun?
    Vielen Dank fürs Lesen und Denken!
    mfg,
    Orbit
     

  2. #2
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.800
    Blog-Einträge
    5
    Zitat Zitat von Orbit Beitrag anzeigen
    In Klasse A soll es nun eine statische Liste geben, in die jede Subklasse beim Start ihren Senf einträgt (zum Besipiel ein QAction dass beim Aufruf ein Fentser (A erbt von QWidget) aus der jeweiligen Klasse öffnet).
    Was heißt „beim Start“? Wenn das Programm startet? Wenn eine Instanz von A erstellt wird? Welchen „Senf“ sollen die Subklassen eintragen?

    Zitat Zitat von Orbit Beitrag anzeigen
    Ist auch egal, es soll jedenfalls etwa so ausseheen, dass es eine virtuelle Methode in jeder Klasse gibt "register", A beim Start einmal für jede Subklasse "register" ausführt und somit die Liste in A gefüllt wird.
    Ich meine NICHT, dass jede Klasse im Konstruktor ihren Teil in die Liste schreibt; das kann ich selber da wäre ja das Problem dass ich von jeder Subklasse erst ein Objekt erstellen müsste.
    Wie willst du denn eine virtuelle Methode aufrufen, ohne eine Instanz zu haben?
    Geändert von Matthias Reitinger (03.08.09 um 17:55 Uhr)
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  3. #3
    Avatar von Orbit
    Orbit Orbit ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Beiträge
    175
    Also ich stelle es mir so vor dass die Klasse A eine Methode anbietet die alle anderen Klassen lädt; also quasi beim Programmstart oder auch später aber auf jeden Fall bevor von jeder Subklasse ne Instanz erzeugt wurde; die Liste ist unabhängiog von Objekten und enthält nur Klasseninformationen.
    Der Senf könnte zB so aussehen dass in der Liste hinterher jede Subklasse von A einen QString oder eben ne QAction da eingefügt hat; aber eben Klassenabhängig!

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    class A:public QWidget{
          ...
         static void loadSubClasses();
         virtual void register();
         static QList<QString> classNames;
     
    }
    A::classNames = new QList<QString>;
     
    class B : public A {
         void register();
    }
     
    void B::register(){
         classNames<<"name der klasse B";
    }
     
    ..
    und halt so dass man aus main() die Methode A::loadSubClasses aufrufen kann.

    LG Orbit
     

  4. #4
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.800
    Blog-Einträge
    5
    Meinst du das vielleicht so?
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    
    #include <iostream>
    #include <string>
    #include <vector>
     
    class A {
     public:
      static void PrintSubclasses() {
        std::vector<std::string>::const_iterator it = classNames().begin();
        for (; it != classNames().end(); ++it) {
          std::cout << *it << std::endl;
        }
      }
     
     protected:
      static std::vector<std::string> &classNames() {
        static std::vector<std::string> *inst = new std::vector<std::string>();
        return *inst;
      }
    };
     
    template<typename T>
    class CallRegisterOnInit {
     public:
      CallRegisterOnInit() {
        T::Register();
      }
    };
     
    class B : public A {
     public:
      static void Register() {
        classNames().push_back("Klasse B");
      }
    };
    static CallRegisterOnInit<B> __call_register_on_init_B;
     
    class C : public A {
     public:
      static void Register() {
        classNames().push_back("Klasse C");
      }
    };
    static CallRegisterOnInit<C> __call_register_on_init_C;
     
    int main(void) {
      A::printSubClasses();
      return 0;
    }

    Grüße, Matthias
    Orbit bedankt sich. 
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  5. #5
    Avatar von Orbit
    Orbit Orbit ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Beiträge
    175
    Super danke:-P
     

Ähnliche Themen

  1. JSF 2.0 - PostConstructs werden sinnlos aufgerufen
    Von NeuerUser im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 28.08.10, 12:22
  2. Spring & AspectJ:Methode wird nicht aufgerufen
    Von pizza1234 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 18
    Letzter Beitrag: 12.05.09, 18:21
  3. JPanel vs. Aufruf statischer Methode
    Von Pius Hermit im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 7
    Letzter Beitrag: 02.10.07, 15:58
  4. jsf: set-Methode wird nie aufgerufen
    Von schaefli im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 19.03.07, 00:54
  5. Seite kann nicht aufgerufen werden
    Von uni im Forum HTML & XHTML
    Antworten: 7
    Letzter Beitrag: 21.01.03, 21:41