C++

Friend

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Friend-Klassen bzw. Friend-Funktionen erlauben Ihnen den Zugriff auf Membervariablen auch außerhalb der eigentlichen Klasse. Lernen Sie den richtigen Umgang mit der friend-Anweisung.

Transkript

Mit Klassen kann man an sich wirklich sehr elegant programmieren. Manchmal braucht man aber auch spezielle Möglichkeiten, um zum Beispiel auf private Members von Klassen zuzugreifen, nämlich von anderen Klassen aus oder von anderen Prozeduren aus. Also dazu mal ein kleines Beispiel. Damit es auch ein bisschen anschaulich ist haben wir die mal die class Spion_cls ist hier eine Vorwärtsdeklaration auf die Klasse, sowas geht auch, das brauche ich nämlich jetzt hier gleich. Definiert mit dieser Spion_cls möchte ich gerne die privaten Members sozusagen von meiner Raumschiff_cls ausspionieren. Um genau zu nehmen will ich wissen wie viel Treibstoff er hat. Also raumschiff_cls ist erstmal unsere Hauptklasse, private: x y, teibstoff und userid, public ist natürlich der Konstruktor, mit ID wird es initialisiert, treibstoff auf 1000 gesetzt, da ID definiert, x y auf 0, da tun wir jetzt auch nicht mehr damit, aber hier mal so als Basis. Und damit die anderen eine Routine die ich da jetzt noch schreiben will, um Klassen zugreifen können, muss ich sie hier als friend definieren. Nun obwohl auch der Spion ja nicht wirklich ein Freund ist, muss man aber hier aber friend Spion_cls schreiben, damit ich in der Klasse Spion direkt auf die privaten Mitglieder zugreifen kann. Mit friend void klau_treibstoff, das ist noch ein bisschen, definiere ich einen Piraten, als Freund sozusagen, aber er darf dann eben auch auf die privaten Members zugreifen, hier muss ich aber genau angeben wie die Signatur aussieht von der Prozedur klau_treibstoff (Raumschiff_cls & ship) gebe ich hier als Parameter nachher mit. Bei freind Spion_cls wird die gesamte Klasse als Freund deklariert. Jetzt definieren wir hier mal die Prozedur klau_treibstoff, die muss hier natürlich genauso aussehen wie ich es hier oben deklariert habe. Treifstoff soll einfach um 400 reduziert werden, wenn kleiner 0 dann auf 0 gesetzt. Na ja das ist hier noch eine Feinheit, aber damit kann ich den Treibstoff eliminieren. Ship.treibstoff ist klar, weil ich hier oben als Refrerenz das Raumschiff mitgebe. Ich muss es als Referenz oder als Pointer geben, damit ich überhaupt darauf zugreifen kann. Normalerweise könnte ich aber mit .treibstoff nicht drauf zugreifen. Nur weil ich hier oben ein friend deklariert habe, ist es dieser Prozedur überhaupt möglich drauf zuzugreifen. Und für die Klasse Spion _cls gilt das Gleiche. Da habe ich jetzt eine public Member, deklariert gar keine Variablen, da könnten natürlich noch mehr drin stehen. Ein gettreibstoff als Wert liefert er mir nämlich hier von Raumschiff ship, Einfach ship.treibstoff. Da könnte ich auch nicht drauf zufreifen, wenn es kein friend wäre. Und im Hauptprogramm ist es jetzt ganz einfach. Da habe ich jetzt hier ein Raumschiff_cls raumschiff von 1 ist der User-ID, eine Spion_cls myspion, und hier rufe ich direkt auf klau_treibstoff von Raumschiff, als Referenz geht es ja hier direkt durch und mit cout gebe ich mit hier den Wert des Treibstoffvorrates aus, Mein Spion kann das also ermitteln, obwohl er gar nicht direkt in der Klasse vorkommt. Jetzt probieren wir das Ganze natürlich mal aus, schauen was geht, 1000 wie gesagt war der Anfangswert und 400 wird abgezogen durch den Klau und 600 wird durch den Spion ausgegeben , also ganz witziges Beispiel. Diese Friendklassen braucht man relativ häufig oder dieses friend-keyword braucht man relativ häufig. Wenn man Verknüpfungen zwischen Klassen durchführen will, sollte man aber auch nicht zu häufig einsetzen, nur wenn es unbedingt notwendig ist, weil man sonst eigentlich diesen privaten Member Mechanismus untergräbt, dadurch dass man es aber hier angeben muss. In der Klasse kann man das nicht so ohne weiteres nachträglich ergänzen, nur wenn man auch die Klasse selber ändert.

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!