Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Klassen und Objekte. Objektorientierung  Denkmodell, welches von C++ unterstützt wird OO-Design kann in C++ implementiert werden Verwendung von OO-Features.

Ähnliche Präsentationen


Präsentation zum Thema: "Klassen und Objekte. Objektorientierung  Denkmodell, welches von C++ unterstützt wird OO-Design kann in C++ implementiert werden Verwendung von OO-Features."—  Präsentation transkript:

1 Klassen und Objekte

2 Objektorientierung  Denkmodell, welches von C++ unterstützt wird OO-Design kann in C++ implementiert werden Verwendung von OO-Features nicht zwingend OO-Design!  Erstellen von Architektur und Design hat den stärksten Einfluss auf die Software konzeptuelle Änderungen können Auswirkungen auf das gesamte Programm haben Instabilitäten bis hin zum kompletten Redesign  Abstraktionsschichten

3 Klassen und Objekte  Eine Klasse beschreibt Eigenschaften und Funktionalität einer bestimmten Gruppe von Objekten. Eine Klasse ist ein (komplexer) Datentyp.  Objekte sind spezielle Ausprägungen (Instanzen) einer Klasse in einem bestimmten Zustand. Ein Objekt ist eine Variable.

4 Klassen class YetAnotherClass { private: int32 *myValue_; // Zustandsvariable public: YetAnotherClass(int32 a_Value); // Konstruktor ~YetAnotherClass(); // Destruktor const int32 *GetMyValue(); // Methode }; const int32 *YetAnotherClass::GetMyValue() { return myValue_; }

5 Objekte int main(int argc, char *argv[]) { YetAnotherClass myYAC (42); cout << "Die Antwort ist " << *myYAC.GetMyValue() << endl; cout << *myYAC.myValue_; return (0); }

6 Klassen - Zugriffsmodifizierer  private: Zugriff nur durch Methoden, die in der gleichen Klasse definiert sind, sowie friend-Funktionen und Klassen  protected: Wie private, zusätzlich dürfen Methoden aus abgeleiteten Klassen zugreifen  public: alle Funktionen und Methoden dürfen zugreifen

7 Klassen - Konstruktoren  Wird nach der Reservierung des Speichers für die Instanz aufgerufen  Overloading, dh. mehrere Konstruktoren mit unterschiedlichen Parametersätzen möglich  default Konstruktor nimmt keinen Parameter entgegen wird automatisch erzeugt, wenn kein anderer Konstruktor definiert wurde  copy Konstruktor nimmt als Parameter die „eigene“ Klasse entgegen wird automatisch erzeugt

8 Konstruktoren class YetAnotherClass { … // default constructor YetAnotherClass(); // constructor with a parameter YetAnotherClass(int32 a_Value); // copy constructor YetAnotherClass(const YetAnotherClass &src); … };

9 Konstruktoren YetAnotherClass::YetAnotherClass() { myValue_ = new int32(0); } YetAnotherClass::YetAnotherClass(int32 value) { myValue_ = new int32(value); } YetAnotherClass::YetAnotherClass(const YetAnotherClass &src) { myValue_ = new int32(src.myValue_); }

10 Konstruktoren int main(int argc, char *argv[]) { YetAnotherClass first; YetAnotherClass second(42); YetAnotherClass third(second); return (0); }

11 Klassen - Destruktoren  ~Klassenname();  wird vor dem Freigeben des durch die Klasse belegten Speichers aufgerufen  es gibt genau einen (parameterlosen) Destruktor  ein nicht deklarierter Destruktor wird implizit erstellt

12 Destruktoren class YetAnotherClass { … // destructor ~YetAnotherClass(); … }; YetAnotherClass::~YetAnotherClass() { delete myValue_; }

13 Aufgabe 14: Bitte melde dich  Erstelle eine einfache Klasse, die einen Integerwert speichert  Erstelle für diese Klasse einen default- Konstruktor, einem Kopierkonstruktur und einem für die Initialisierung mit einem Wert  Erstelle einen Destruktor  Die Konstruktoren und der Destruktor sollen ihren Aufruf über die Konsole mitteilen  Erstelle Instanzen dieser Klasse, die je einen der Konstruktoren verwendet

14 Klassen – class member  Variable oder Methode, die für alle Instanzen der Klasse gleich ist und nicht für jedes Objekt extra existiert  Deklaration über static  Definition erforderlich – auch für die Variable! (üblicherweise im zugehörigen *.cpp-File)

15 Klassen – class member // im Headerfile class MyClass { protected: static uint16 instance_count_; public: static uint16 GetInstanceCount(); … } // im *.cpp-File uint16 MyClass::instance_count_ = 0; uint16 MyClass::GetInstanceCount() { return instance_count_; }

16 Klassen – class member  Zugriff über den Scope Operator (::) cout << "Anzahl Instanzen: " << MyClass::GetInstanceCount() << endl;  wenn eine Instanz der Klasse vorhanden ist, kann auf einen class member auch über dieses Instanz zugegriffen werden

17 Klassen – statische Konstanten  Wertzuweisung in der Klassendeklaration class myClass { … static const uint8 FRONT_SIDE = 0x01; … };  Zusätzlich muss die Definition im zugehörigen cpp-File erfolgen const uint8 myClass::FRONT_SIDE;

18 Aufgabe 14: Selbstzähler  Erstelle eine Klasse, die automatisch die Anzahl der von ihr erstellten Instanzen zählt  Teste die Klasse, indem du ein Programm schreibst, welches eine Funktion enthält, die 2 Instanzen der Klasse erstellt und am Ende die Anzahl der Instanzen ausgibt in der main Funktion folgende Schritte durchführt ○ Erstelle eine Instanz der Klasse und gib die Anzahl der Instanzen aus ○ Rufe die Funktion zum Erstellen der 2 Instanzen auf ○ gib die Anzahl der Instanzen aus ○ Erstelle eine weitere Instanz der Klasse und gib die Anzahl der Instanzen aus


Herunterladen ppt "Klassen und Objekte. Objektorientierung  Denkmodell, welches von C++ unterstützt wird OO-Design kann in C++ implementiert werden Verwendung von OO-Features."

Ähnliche Präsentationen


Google-Anzeigen