Kommunikation zwischen Klassen



  • Hallo,

    erstmal ein "HALLO" an alle hier, die diesen Beitrag lesen, denn ich bin neu hier. 🙂

    Ich habe mal eine Frage zur Kommunikation zwischen Klassen.

    Folgender Fall:

    class A
    {
       bool m_bCheckA;
       float m_fA;
    };
    
    class B
    {
       bool m_bCheckB;
       float m_fB;
    };
    

    Das ist zwar nicht vollständig, aber es geht nur ums Prinzip.

    Class B muss jetzt zur Laufzeit Zugriff auf bool m_bCheckA der Class A haben, damit sie bestimmt Checks und Berechnungen machen kann. Jetzt gibt es noch 5 andere Klassen, die das auch machen müssen und der Code ist wesentlich komplexer. Wie kann ich denn zulassen, das andere auf Class A members zugreifen können OHNE friend Funktionen zu benutzen und was dann zur Laufzeit auch relativ schnell geht?

    Vielen Dank für eure Zeit.

    Gruß
    Pete



  • class A 
    { 
    public:
       bool getCheckA() const {return m_bCheckA;}
       ...
    private:
       bool m_bCheckA; 
       float m_fA; 
    };
    

    So, vielleicht ????



  • Die einfachste (und unsauberste) Lösung wäre es wohl, die Membervariablen von A als public zu deklarieren - dann kann sie allerdings jeder lesen UND schreiben.

    etwas sicherer ist folgende Variante:

    class A
    {
    public:
      bool getCheck() const {return m_checkA;} // Lesezugriff
      void setCheck(bool v) {m_checkA=v;}// Schreibzugriff
      ... (analog für andere Werte)
    private:
      bool m_checkA;
      float m_fA;
    };
    

    (wenn andere Klassen nur lesen sollen, entfällt die setCheck()-Methode)



  • Vielen Dank für die Antworten.

    Habe dann aber noch eine zusätzliche Frage: Muss ich dann in Class B ein Object der Class A erzeugen?

    class B
    {
       public:
       void run();
    
       private:
       bool m_bCheckB;
       float m_fB;
    }; 
    
    void B::run(void)
    {
       A OjectA;
    
       if(ObjectA.getCheck())
       {
          m_bCheckB = TRUE;
       }
    }
    

    Müsste ich das dann so machen?



  • Du kannst dir auch irgendwo außerhalb ein Objekt vom Typ A erzeugen und dann an die Methoden von B weiterreichen.



  • Also so dann:

    int main(void)
    {
       A ObjectA;
       B ObjectB;
    
       ObjectB.run(ObjectA)
    }
    

    Oder mit Referenz oder Pointer ? War wäre denn schneller?



  • Referenzen dürften etwas schneller sein als Kopien, gerade wenn es um große Objekte geht (evt noch mit eigener Speicherverwaltung).



  • Danke schön!!! 🙂


Anmelden zum Antworten