Anmerkungen eines Anfängers zu C++



  • Nein, mit "friend" gibst du jemandem die Tresor-Schlüssel. Einbruch wäre es, wenn jemand ohne deine Zustimmung an den Tresor-Inhalt kommt.

    ich finde dieses "friend" konstrukt recht seltsam und bin der meinung, dass man die datenkapselung sowiso nicht einfach unterlaufen können sollte. deshalb die analogie zum einbruch.
    natürlich hast du recht.


  • Administrator

    DEvent schrieb:

    In CHull kann man mit den Hitpoints womöglich nichts anfangen

    Wie "nichts anfangen", wozu hat dann Hull dieses Attribut? Eine Schiffshülle kann man reparieren. Ein CHull::repair() und schon kann Warship und Tradeship ihre Hülle reparieren.

    Nein kann man in dem Fall nicht. Und ein Tradeship kann keine Hippoints verlieren und kann auch nicht sich reparieren, aber besitzt welche und zwar eigentlich für nix ^^
    Wieso das so ist? Fragt mich nicht, ist in einem Spiel so und ich habe eine Verwaltung dazu erstellt und es mussten halt alle Daten verwaltet werden. CHull hatte somit nur eine einzige Methode, welche die Hitpoints betraf und das war dieses getHippoints(). Ein Tradeship musste aber trotzdem einen Speicherbereich für Hitpoints haben, wie ein WarShip. So habe ich das eben in die Hülle gepackt und als protected deklariert. Ich wüsste nicht, wie das Schaden könnte. Und ich fände es idiotisch, wenn ich nun im WarShip und im TradeShip ein Attribut für die Hitpoints deklarieren müsste 😉
    Auch könnte ich dann nicht mehr ein Hüllenpointerarray durchlaufen und alle Hitpoints ausgeben 😉
    Die Lösung passt in dem Fall für mich perfekt und deshalb bin ich auch der Meinung, dass es Situationen gibt, wo ein protected Attribut auch angebracht ist.

    Die angesprochenen repairs und weiss zum Kuckkuck nicht alles kenne ich auch und dort verwende ich dann auch privat, weil es einfach völlig Fehleranfällig wäre mit protected. Aber wie gesagt, habe mich ja ein wenig versprochen, war in einer Mathevorlesung und da ist mir wohl irgendwie der Name Variable nachgelaufen 😉
    Sobald man allerdings Attribute + Methoden dort oben hinschreibt, dann ist es natürlich die Mehrzahl, wegen den Methoden, weil es ja meistens von denen mehr hat als Attribute.

    Grüssli



  • krabbels schrieb:

    ich finde dieses "friend" konstrukt recht seltsam und bin der meinung, dass man die datenkapselung sowiso nicht einfach unterlaufen können sollte. deshalb die analogie zum einbruch.
    natürlich hast du recht.

    Was ist denn daran seltsam? Einen friend sehe ich normalerweise als eine externe Hilfsklasse, die mich bei meiner Arbeit unterstützen soll - und dazu benötigt sie auch etwas mehr Informationen als der Rest der Welt (z.B. benötigt ein Container-Iterator das Wissen, wie der Container aufgebaut ist, also benötigt er Zugriff auf dessen interne Strukturen, für den Rest der Welt reicht es zu wissen, daß der Container die Daten irgendwie speichert und daß der Iterator weiß, wie er rankommt)

    @Dravere: Wenn nur Kriegsschiffe Hitpoints haben sollen (was ist denn das für ein Spiel?), dann benötigen Handelsschiffe auch kein entsprechendes Attribut - sprich: Der Member m_nHitPoints und die entsprechende Zugriffsmethode gehören nicht in die Basisklasse.
    (wenn es unbedingt sein soll, würde ich die getHitPoints() virtuell anlegen (entweder pur virtuell oder als Dummy-Funktion "return -1;"))



  • Ein friend-Funktion oder Klasse ist ok, weil man explizit angeben muss, welche Klasse/Funktion friend ist. Allerdings finde ich es besser, die friend-Klasse als inner-class zu machen, weil eine friend-Klasse nicht ohne die richtige Klasse funktionieren kann.



  • Auf Grund verschiedener Anmerkungen, möchte ich noch mal betonen, dass mein Beitrag rein ironisch gedacht war und Gott sei Dank haben es die meisten auch so verstanden. Bezüglich der Alternativen sollte man den Text auch mal genau lesen.
    Das mit dem private, protected und public ist mir nur eingefallen, weil ich es eben so ausgelegt habe, wie ich es umgangssprachlich deute und in meiner ersten Klasse die internen Variablen als protected deklariert habe (grgrgrgr). Vielleicht fällt mir ja wieder was ironisches ein, bei dem sich manche dann nicht so auf den Schlips getreten fühlen. So long und viel Spass beim programmieren.
    Gruss Walter



  • Ist doch schön, wenn jemand C++ "witzig" findet. das erhöht den Spaßfaktor beim Proggen.

    ... arbeitet jemand von euch so richtig konsequent ersthaft mit public/private/protected ?

    C++ verwendet man, wenn man OOP http://de.wikipedia.org/wiki/Objektorientierte_Programmierung betreiben will. Da macht spezifische Kapselung absolut Sinn. Modernere Sprachen verwenden doch noch mehr solcher Zugangsmodi. 😉



  • Richtig, Java hat sogar 4 Stufen: private, protected, default und public.



  • bei cpp ist default doch wenn man nichts angibt {wird dann private} #gg



  • Was heisst eigentlich OOP??? Open Office protected oder was?



  • Walter_vdV schrieb:

    Was heisst eigentlich OOP??? Open Office protected oder was?

    Ein Scherz oder? Objektorientierte Programmierung.



  • Jester schrieb:

    ...oder besser doDamage(unsigned int) und repair(unsigned int)

    So schön zu sehen. So elegant. Ich glaub ich bin verliebt...in OOP 😃


Anmelden zum Antworten