Nochmal Klassenarchitektur (Klassenunsichtbarkeit)



  • ich müchte Klasse Kind nur für Klasse Eltern sichtbar machen:

    class Eltern{
    
    private: 
       class Kind{
       };
    
    };
    

    nun meine frage, kann ich das auch machen wenn ich die Kind Klasse nich in der Elente klasse verschachtle?? grüße



  • IMHO: nein.

    BTW ist Deine Klasse Kind kein 'Kind' der Klasse Eltern im OO-Sinn.

    greetz, Swordfish



  • Hmm, würde es vielleicht (als dumme Idee jett) funktionnieren, wenn man in Kind alles private machen würde (vor allem die Konstruktoren) und dann Eltern als friend deklarieren würde? Dann ist Kind zwar nicht "unsichtbar" wäre aber nicht einsetzbar, oder?



  • Ich frage, weil:

    class Eltern{
    
    private:
    class Kind{
    
    };
    CTypedPtrArray<CPtrArray,Kind*> Array;
    
    public:
    Kind* getKind(size_t index){...);
    };
    
    Eltern o;
    Eltern::Kind* p= o.getKind(..); //<--- dann nicht geht...
    

    muss ich woh anderes Designen..



  • BorisDieKlinge schrieb:

    Ich frage, weil:

    [...]Eltern o;
    Eltern::Kind* p= o.getKind(..); //<--- dann nicht geht...
    

    Was genau willst du erreichen? Soll dieser Code in deiner Anwendung funktionieren? -> Du darfst die Kind-Klasse nicht privat deklarieren.



  • BorisDieKlinge schrieb:

    Ich frage, weil:

    class Eltern{
    
    private:
    class Kind{
    
    };
    CTypedPtrArray<CPtrArray,Kind*> Array;
    
    public:
    Kind* getKind(size_t index){...);
    };
    
    Eltern o;
    Eltern::Kind* p= o.getKind(..); //<--- dann nicht geht...
    

    muss ich woh anderes Designen..

    in dem fall darfst du die kind klasse nicht verstecken, weil du ja ein zeiger auf sie zurückgibst. Erklär mal genauer, was du machen willst, und wieso der nutzer die klasse nicht "kennen" soll.



  • naja hatte eigenlich Architektorische gründe.. aber wenn ich sie Kind klasse public deklarier.. bleibt die Archtektur (verschachtelun, das kind zu Elten gehört) erhalten.. dann mach ich es so.. danke...



  • Hi Boris,

    kann es sein, dass Du hier "Klasse" und "Instanz" ein wenig durcheinander bekommen hast ?
    Wenn außerhalb von Eltern bekannt sein soll, wie ein "Kind prinzipiell aussieht" (andernfalls kann sowieso keiner was damit anfangen, weswegen ein getKind() sinnlos wäre).

    Wenn außerhalb von Eltern aber nur nicht auf das jeweilige Kind direkt zuzugreifen, sollte die Klasse public, die Instanz (das Element) private sein:

    class Eltern{
    public:
       class Kind{
       };
       Kind* getKind(size_t index){...);
    private:
       CTypedPtrArray<CPtrArray,Kind*> Array;
    };
    

    Übrigens: Wenn Du einen Kind* direkt rausgibst, läufst Du in verschiedene Gefahren: Einerseits kann von außerhalb direkt Dein jeweiliges Kind verändern (sogar deleten), andererseits kannst Du innerhalb von Eltern unbeabsichtigt den Aufrufer "abschießen", indem Du seinen Zeiger, den er sich mal geholt hat ungültig machst ... z.B. wenn Du Deinen Container (CTypedPtrArray) umsortierst oder verlagerst.

    Vielleicht stört Dich das nicht, aber das solltest Du bei diesem Design bedenken.

    Gruß,

    Simon2.



  • @BorisDieKlinge:
    Mal ein Tipp, um deine Beiträge wenigstens etwas lesbarer zu machen:
    .. und ... sind keine Satzzeichen.



  • @MFK: das sind denkpausen;)



  • BorisDieKlinge schrieb:

    @MFK: das sind denkpausen;)

    Dann solltest du vielleicht erst zu Ende denken, und dann schreiben. Oder hältst du deine "Denkpausen" für stilistisch derart wichtig, dass du sie dem Leser vermitteln musst?

    Deine Beiträge sind wirklich oft unter aller Sau.



  • Sorry. Unter allersau?? Inhaltlich, Formatlich oder Gramatikalisch??



  • BorisDieKlinge schrieb:

    Sorry. Unter allersau?? Inhaltlich, Formatlich oder Gramatikalisch??

    Nicht inhaltlich. Aber sonst eigentlich alles andere.

    Willkürliche Groß-/Kleinschreibung, nicht vorhandene oder eigenwillige Zeichensetzung, oft unvollständige Sätze, sehr viele Rechtschreibfehler, bei denen klar ist, dass sie nicht durch Unkenntnis, sondern durch Schlampigkeit entstanden sind (Zeichendreher, verschobene Leerzeichen usw.).

    Man sieht eben, dass du die bei der Erstellung deiner Beiträge oft praktisch gar keine Mühe gibst. Du rotzt das einfach nur so dahin, und überlässt den Lesern, von denen du ja eigentlich etwas willst, die mühsame Aufgabe, aus diesem Wirrwarr wieder hinter den Sinn zu kommen.

    Das kann potentielle Helfer verärgern oder sogar abschrecken: Wenn du dir so wenig Mühe mit der Frage gibst, warum soll ich mir Mühe mit der Antwort geben?

    Der Eindruck, der bei dir entsteht, ist dieser:
    Problem -> Frage ins Forum rotzen.

    Es sollte eigentlich so sein:
    Problem -> Ursache untersuchen -> Selbst nach Lösungen suchen -> Fragestellung formulieren -> Frage ins Forum stellen -> Nochmal Frage auf Fehler und mögliche Unklarheiten prüfen -> Abschicken.


Log in to reply