Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Timo Pfeiffer Geändert vor über 8 Jahren
1
Operator Overloading, Mehrfachvererbung, Safe Pointer, Observer
2
Operator Overloading Ziel: Verwendung der gängigen Operatoren (+, =, ==,... ) für benutzerdefinierte Typen Funktionsweise von Operatoren Funktionen spezieller Syntax unäre, binäre Operationen Definition beim Typ des (ersten) Operators
3
Operator overloading Deklaration von Operatoren äquivalent zu Methodendeklaration statt Methodenname Schlüsselwort operator gewünschter Operator es gelten alle Regeln für overloading, overriding, virtual wie bei Methoden Deklaration abhängig von gewünschter Funktionalität des Operators Rückgabewert als neues Objekt oder Referenz leere Parameterliste bei unärem, ein Parameter bei binärem Operator
4
Operator overloading retType [&]operator symb ([param]) [const] retType Ergebnis der Operation z.B. bool bei '==' oder Ausgangstyp bei '+' & wenn der zurückgegebene Wert keine neue (temporäre) Variable ist z.B. bei '+='
5
Operator overloading retType [&]operator symb ([param]) [const] symb zu definierendes Operatorsymbol param leer bei unären Operatoren rechter Operand bei binären Operatoren const Basisoperand wird nicht geändert nicht bei '+='
6
Operator overloading Unäres Minus '-' (Beispiel) classType operator – () const; Addition mit Zuweisung '+=' (Beispiel) classType &operator += (const classType &var);
7
Mehrfachvererbung Eine Klasse kann von mehreren Basisklassen abgeleitet werden Auflistung des Basisklassen durch Komma separiert class derived : public base1, public base2 Eigenschaften und Methoden aus beiden Basisklassen stehen zur Verfügung Vorsicht bei Ambiguitäten!
8
Mehrfachvererbung Problem Ambiguität Beide (oder mehrere) Basisklassen verwenden die gleiche Methoden- / Eigenschaftsbezeichnung Methode / Eigenschaft muss in abgeleiteter Klasse überschrieben werden (overriding) überschriebene Methode muss sich um Aufruf der Basisklassen kümmern Auflösung über ScopeOperator
9
Safepointer Ziel: ein Pointer zeigt entweder auf ein gültiges Objekt, oder auf NULL Vermeidung von Speicherfehlern Weitere Eigenschaften Objekt löschen, wenn keine Referenzen mehr darauf zeigen Sicheres Umgehen mit zirkulären Referenzen
10
Safepointer Kapselung von nativen Pointern in eine Templateklasse Funktionalitäten Automatisches Initialisieren des Pointers bei Definition Funktion zum Erstellen eines Objektes Löschen von nicht mehr verwendeten Objekten Referenzzähler zwei Arten von Safepointern zur Vermeidung zirkulärer Referenzen
11
Safepointer Variablen der eigentliche Zeiger Referenzzähler ○ starke Referenzen ○ gesamte Referenzen 2 unterschiedliche Klassen starke und schwache Pointer schwache Pointer erhöhen nur die gesamten Referenzen Schwache Zeiger liefern NULL, wenn die Anzahl der starken Referenzen 0 ist.
12
Safepointer zusätzliche Eigenschaften threadsicheres Inkrementieren und Dekrementieren der Referenzzähler Überladung der Pointeroperationen *, ->, Zuweisung Überladung der Vergleichsoperationen unabhängig ob schwacher oder starker Pointer Funktion zum wrappen nativer (normaler) Pointer cast Operationen
13
Observer - Pattern 1:n Abhängigkeit Benachrichtigung an abhängige Objekte, wenn das beobachtete Objekt seinen Zustand geändert hat Publish-Subscribe zur Erhaltung der Konsistenz lose gekoppelter Objekte
14
Observer - Pattern observer 1 tabelle observer 2 balken- diagramm observer 3 onlineupdate subject a=20 s="C++" f=23.45 Änderungsmitteilung Änderung, Anfrage
15
Observer – Pattern (Anwendung) Kapselung verschiedener Aspekte einer Abstraktion, bei der ein Aspekt vom anderen abhängig ist Eine Änderung eines Objektes erfordert die Änderung einer unbekannten Anzahl anderer Objekte Ein Objekt soll andere Objekte benachrichtigen können, ohne nähere Informationen zu diesen Objekten zu besitzen
16
Observer - Pattern Quelle: Gamma et al.: Design Patterns
17
Observer - Pattern Subject kennt seine Observer eine beliebige Anzahl Observer Objekte kann das Subject beobachten definiert ein Interface zum Hinzufügen und Entfernen von Observern Observer definiert ein Update-Interface, welches von Änderungen im Subject benachrichtigt werden soll
18
Observer - Pattern ConcreteSubject von Subject abgeleitet hält für ConcreteObserver interessante Zustände sendet eine Mitteilung an seine Observer, wenn sich sein Zustand geändert hat ConcreteObserver von Observer abgeleitet hält eine Referenz auf ConcreteSubject hält Zustände, die konsistent mit Zuständen von ConcreteSubject sein sollen implementiert das Update-Interface zur Sicherstellung der Konsistenz
19
C++ Bibliotheken Boost C++ Libraries freie, von Experten geprüfte, plattformunabhängige C++ Quellenbibliothek zielen auf Standardisierung Teile bereits im ersten Technischen Report des C++ Standards Committee low-level Funktionalitäten www.boost.org
20
C++ Bibliotheken Qt plattformübergreifende Klassenbibliothek nicht C++ exclusiv zur Entwicklung grafischer Benutzeroberflächen bis Version 4.4 GPL, ab 4.5 LGPL Entwickler: QT Software http://www.qtsoftware.com/
21
C++ Bibliotheken OGRE Object-Oriented Graphics Rendering Engine 3D-Engine zur Verwendung hardwarebeschleunigter 3D Grafik unterstützt Direct3D und OpenGL gute Dokumentation http://www.ogre3d.org/
22
ENDE
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.