Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

C++

Nested

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Verschachtelte Klassen sind eine Sonderform von Klassendefinitionen. Erfahren Sie vom Trainer, wie diese richtig erzeugt werden und worauf Sie bei deren Verwendung achten sollten.

Transkript

Klassen kann man wenn es sein muss auch ineinander verschachteln und das zeige ich Ihnen mal hier an einem etwas künstlichen Beispiel. Also hier habe ich die Klasse ausen_cls. Das ist die umschließende Klasse definiert. Und da geht es jetzt los mit public, eine Variable die ich auch für ganz außen sozusagen verwenden kann, aber jetzt definiere ich als nächstes eine Klasse innen_cls. Bis daher ist die Definition. Ihr habt eine Variable b und definiert hier gleich als fremd die aussen_cls. Sowas kann man also auch machen. Das ist dann schon eine ganz komplizierte Verschachtelung. Diese Klasse wird hier gleich instanziiert mit cinn1. Damit habe ich sie schon hier als Variable zur Verfügung. Ich habe jetzt hier nochmal, das kann man natürlich auch explizit so schreiben, innen_cls cinn2. Damit habe ich hier zwei Elemente, 2 Variablen vom Typ Klasse innen_cls. Ja, damit das ganze nicht so einfach wird, machen wir das Ganze nochmal mit noch eine Klasse public int c und hier habe ich auch einen Konstruktor mal zur Abwechslung jetzt noch definiert, mit c=1000 initialisiert er diese Variable und einen Aufruf, der extern deklariert wird, extern von dieser Innenklasse. Das kann ich dann nach außen schieben soweit ich möchte. Man muss es nachher nur richtig angeben bei der entsprechenden Definition. Nun dann schauen wir mal wie das hier weiter geht. Es wird jetzt ein bisschen verschachtelt schon das Ganze. Hier in der Ausßenklasse habe ich ::nocheine_cls innen definiert, ::nocheine_cls, also eine von den inneren, namlich nocheine_cls, das kann ich so angeben. Das kann ich aber auch hier wie oben schreiben. Es ist jetzt hier nur eine andere Variante das zu schreiben. Mit pcinn3 ist also die dritte Klasse, die ich hier innen definert habe. Jetzt komme ich zum Konstruktor von außen, also der unsere Hauptklasse initialisiert. Der definiert mir jetzt hier, das ist nämlich diesmal ein Pointer für eine dynamische Klasse, pcinn ein Pointer auf die cinn 3, mit new nocheine_cls, eigentlich diese Klasse hier vom Inhalt, das heißt, der Konstruktor nocheine_cls wird aufgerufen. Und dann brauche ich auch einen Destruktor, wenn ich hier schon was dynamisch anlege, nämlich wenn die aussen_cls zerstört wird, dann wird die mit delete auch den inn_cls freigeben. So, jetzt haben wir hier noch eine Deklaration beziehungsweise eine Definition der Prozedur aufrufext, den ich ja hier oben schon mit einer Vorwärtsdeklaration hingeschrieben habe und ich definiere das, indem ich von aussen_cls ::, da kann ich hier auch mal reingehen, dann sieht man nämlich, dass hier schon nocheine_cls definiert ist und wenn ich hier mit Doppelpunkt Doppelpunkt reingehe, kriege ich auch hier den aufrufext und hier definiere ich ws er tun soll, nämlich c++ um 1 erhöhen. Dieses ganze Monster werden wir jetzt mal aufrufen, indem ich hier ein Element c1 definiere von Typ aussen_cls, c1.a ist 123, cinn kann ich hier auch so zugreifen, also in die Elemente von innen komme ich auf die Art und Weise auch ran, weil die sind ja hier schon statisch mit angelegt sozusagen, also gleich beim Aufruf mit angelegt, dann habe ich hier einen Pointer, den ich ja auch definiert habe und kann hier auf die Variable c zugreifen, ich kann auch meine Prozedur, die das um 1 erhöht aufrufen und ich kann das ganze hier auch entsprechend aufgeben. Und Sie sehen schon das ist eine ziemlich verzwackte Geschichte die ich hier habe und wir rufen das jetzt mal, ich lasse es hier nochmal auskommentiert, da habe ich noch was anderes mit vor, rufe das Ganze mal auf und schauen mal, ob das auch wirklich so funktioniert und da kommt jetzt 124 raus. Das ist fast wie bei [unverständlich] wo auch ein fester Wert, ich glaube es war 42 oder 41 raus kam. Also funktioniert. Das muss man jetzt natürlich erstmal nachprobieren, weil das ist eigentlich kein Geheimnis, 123 das addiert eigentlich 1 drauf und dann habe ich hier 124 stehen und die anderen Werte haben wir jetzt gar nicht ausgegeben. Naja, was hat es hier noch mit auf sich? Da muss ich mal schauen, cinn2, das ist hier, ist die Variable c, nun die müsste hier eigentlich ohne weiteres auch erreichen können. Probieren wir es einfach mal aus, da was zuweisen können. Das geht aber nicht, weil Error ist kein Element von aussen / inn_cls. Da muss man ein bisschen aufpassen. Da komme ich jetzt gar nicht so weit ran. Das innc ist nämlich hier gar nicht definiert. Warum nicht? Weil hier steht ja nur b drin. Da komme ich jetzt hier mit inn2 nicht weiter. Das ist ganz klar, weil das steckt ja in dieser Klasse drin, also da müsst Ihr aufpassen, dass man mit diesen Klassenelementen nicht durcheinander gerät, wo hier was in welcher Klasse definiert ist, also das war jetzt dieser Zugriff hier auf c die das eigentlich gar nicht gibt. Und c haben wir hier definiert, wie gesagt. Also tricky das Ganze. Man muss hier wirklich aufpassen auf welche Elemente man da zugreifen kann. Und damit ich hier an diese b Elemente überhaupt von außen rankomme. Ich kann ja mal was probieren. Ich nehme mal das hier raus und schauen mal welche Effekte das hat, wenn ich das weglasse. Nicht wirklich was. Komme ich von außen auch ran? aus dem Grunde, weil das hier als public definiert ist ist es eigentlich kein Problem, also das könnte man sich jetzt hier zum Beispiel schenken. Sie sehen schon eine etwas komplizierte Geschichte mit diesen verschachtelten Klassen. Man muss da wahnsinnig aufpassen wann man hier was braucht. Das friend hätte ich jetzt hier zum Beispiel gebraucht. Wenn ich hier in diesen Bereich in nicht public rein will, also hier statt public ein privete definiere, innerhalb von der Klasse könnte ich ja jetzt hier mit private zum Beispiel was deklarieren, dann würde ich hier nicht rankommen, dann brauche ich dieses friend. Es empfiehlt sich im allgemeinen das Friend drin zu lassen, damit mam da keine Schwierigkeiten hat, wenn man innerhalb von dieser Klassse zugreifen will.

C++

Machen Sie sich mit den einfachen Grundlagen zu C++ vertraut und lernen Sie anhand zahlreicher Übungs- und Codebeispiele die Klassenkonzepte, Prozeduren und Funktionen kennen.

9 Std. 3 min (143 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Video-Training auf DVD mit Bonusmagazin

+ Tutorial to go: Mit Videos für iPod, iPhone & Co.

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!