sinnvoll ??



  • was is sinnvoller wenn, eine classe nur in einer anderen classe verwendet werden darf

    class My{
      int x;
      int y,
      friend class My2;
    };
    class My2{
      My ko;
      public:
      My get();
    };
    My My2::get(){return ko;}
    

    oder

    class My2{
      class My{
        int x;
        int y;
      };
      My ko;
      public:
      My get();
    };
    My My2::get(){return ko;}
    

    und wenn man jetzt mehrere classen erstellt?

    My2 c1;
    My2 c2;
    My2 c3;
    


  • Aufgrund der Übersicht im Sourcecode würde ich die "friend" Methode bevorzugen.

    Klassen in Klassen stecken kann doch sehr schnell unübersichtlich werden...



  • aufgrund der übersicht würd ich die lokale klasse bevorzugen 😉 wenn die nur eine daseinsberechtigung als teil einer anderen klasse besitzt, dann sollte sie auch lokal definiert werden.

    und friend ist eh eklig.



  • Mach doch in der headerdatei eine Forward-Decraration und implementier den Zugriff auf die interne Klasse mitsamt der internen Klasse an sich im Cpp-File.

    MfG Kimmi



  • bei der friend methode könnte man doch

    My ander; 
    int x= ander.x;
    

    einfach so eine variable erstellen(extern der friend classe) aber dann hätte man kein zugriff drauf,dass wäre wohl speicher verbrauch

    und bei der anderen methode könnte man doch keine neue variable erstellen
    da es im privaten bereich is, oder?



  • Weißt du überhaupt, was friend bedeutet? Damit erlaubst du allen Methoden der Klasse "My2" Zugriff auf die internen Daten von "My" - wenn die Klasse ein My-Objekt nach außen übergibt, gelten für das Ziel die üblichen Zugriffsbeschränkungen (das bedeutet: du kannst dieses Objekt normalerweise herumreichen, aber nicht auf seine Elemente zugreifen).



  • was ich jetzt meinte ist wenn man jetzt die classe erstellt
    und keinen zugriff hat ,ist es doch unsinnig eine zu erstellen

    aber wenn man jetzt

    class My2{
      class My{
        int x;
        int y;
      };
      My ko;
      public:
      My get();
    };
    My My2::get(){return ko;}
    
    My2::My verboten; //hier soll er die erstellung vehindern,da die classe im privaten-bereich definiert wurde
    


  • Ja, wenn du verhindern willst, daß irgendwer My-Objekte erstellen kann, ist der Ansatz sinnvoller (aber dann ist sogar die My2::get() sinnlos - und afaik sogar verboten).

    (btw, da die gesamte innere Klasse in der Hauptklasse versteckt ist, reicht dort auch eine struct aus)


Anmelden zum Antworten