Was ist C++ Good to know Was kann mir helfen?
Transcription
Was ist C++ Good to know Was kann mir helfen?
Was ist C++ ◮ Eine Weiterentwicklung von C C++ ◮ Objektorientierte Programmiersprache (OOP) ◮ Objekte stehen im Vordergrund bei OOP ◮ Was ist C++ ◮ Reale Objekte als Software Objekte abgebildet ◮ Datenkapselung ◮ Zusammenfassung von Daten und Funktionen zu Objekten ◮ Hello World! mit C++ • Realisierung mittels Klassen in C++ ◮ string ◮ Datenkapselung! • Kein direkter Zugriff auf Daten • Erfolgt über Schnittstellen 177 178 Good to know Was kann mir helfen? ◮ C++ ist eine höhere Programmiersprache ◮ Endlose Anzahl an Büchern • Die C++ Programmiersprache • Jetzt lerne ich C++ • C++ in 21 Tagen • C++ für C Programmierer ◮ Entwicklung ab 1979 bei AT&T • Entwickler: Bjarne Stroustrup ◮ Erweiterung von C • Einführung eines Klassenkonzeptes (C with classes) • Abwärtskompatibel (zu C) ◮ Online Tutorien • einfach googeln ⇒ keine Syntaxkorrektur ◮ Heute: • voll objektorientiert • ISO genormt ◮ C++ API • C++ Befehlsreferenz http://en.cppreference.com/w/cpp http://www.cplusplus.com ◮ Inspiration für andere Sprachen • C#, Java ◮ Entwicklungsumgebungen ◮ Compiler: • g++, gpp frei verfügbar • Microsoft Visual C++ Compiler • Borland C++ Compiler ◮ engl. Integrated Development Environment (IDE) 179 180 Hello World 1 2 3 4 5 6 Datentyp string 1/2 #include <iostream> int main() { std::cout << "Hello World!\n"; return 0; } ◮ Speichern unter helloworld.cpp ◮ Compilieren mittels g++ helloworld.cpp ◮ Ausgabe: Hello World! ◮ Standardbibliothek für Ein- und Ausgabe in C++ heißt iostream ◮ cout ist der Standard-Ausgabestream • kann unterschiedliche Datentypen übernehmen 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <iostream> #include <string> using namespace std; int main() { string str1 = "Hallo"; string str2 = "Welt"; string str3 = str1 + " " + str2; cout << str3 << "!\n"; str3.replace(6,4, "Peter"); cout << str3 << "!\n"; return 0; } ◮ Ausgabe: Hallo Welt! ◮ Scope-Operator :: deklariert den Namensbereich ◮ Operator << übergibt sein zweites Argument an den Ausgabestream ◮ Strings sind mächtiger als char* ◮ liefert eine Reihe nützlicher Operationen • ’+’ zur Konkatenation • replace zum ersetzen von Teilstrings • substr zum auslesen von Teilstrings • length zum auslesen der Länge u.v.m. ◮ main hat Rückgabewert int 1 2 3 4 5 6 7 Hallo Peter! #include <iostream> using namespace std; int main() { cout << "Hello World!\n"; return 0; } ◮ Zeile 2: Bereich std wird durchgehend benutzt ◮ Datentypen können Methoden haben • Prinzip der Datenkapselung • Sie enthalten mehr als nur die Zeichen (Unterschied zu C) ◮ Mehr zu namespace später 181 182 Datentyp string 2/2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <iostream> #include <string> #include <stdio.h> using namespace std; int main() { string str1 = "Hallo"; string str2 = "Welt"; string str3 = str1 + " " + str2; Klassen printf("%s\n", str3.c_str()); cout << str3 << endl; return 0; } ◮ Was sind Klassen ◮ Ausgabe: Hallo Welt ◮ Objekte Hallo Welt ◮ Klassen und Strukturen ◮ ’Inhalt’ mittels c str() erreichbar • Das sind die bekannten char-Arrays aus C • Zugriff über name.c str() • können mittels printf ausgegeben werden ◮ Wichtig: string 6= char-Array ◮ Zeile 3: Kann auch #include <cstdio> verwenden um C-Standardbibiliotheken einzubinden ◮ Zeile 12: Zeilenumbruch mit endl 183 184 Beispiel 1 2 3 4 5 6 7 8 9 10 11 Was sind Klassen ◮ Klassen sind benutzerdefinierte Datentypen ◮ Verwendung völlig analog zu int, string ◮ Klassen erweitern struct aus C • erlauben Methoden (Funktionen) #include <string> using namespace std; class Student { string name; string studiengang; int matrikelnummer; void lernen(); void testSchreiben(); }; ◮ Deklaration mit Schlüsselwort class ◮ Klassen erlauben das Prinzip der Datenkapselung • Code wird besser wiederverwendbar • black-box-Implementierung möglich ◮ Klassen sind Schablonen für Objekte ◮ enthält Daten (members) • analog zu struct aus C ◮ enthält Funktionen (Methoden) • erlaubt es komplette Objekte abzubilden ◮ Strichpunkt nach Deklaration ◮ Klassen sind der Grundbaustein zur OO ◮ Beschreiben Attribute und Methoden, also Verhaltensweisen, der Objekte ◮ zu Namenskonvention: • C++ ist case sensitive • Groß- und Kleinschreibung beachten ◮ Klassen (Coding Standard) • AlleWorteCapitalizedOhneUnderlines ◮ Methoden, Funktionen und Variablen • erstesWortKleinRestCapitalizedOhneUnderlines 185 Objekte 186 Zugriffskontrolle ◮ Objekte sind Instanzen einer Klasse • Sie sind die tatsächlichen Variablen • werden angelegt wie bei primitiven Typen • entsprechen Variablen vom struct Datentyp Student Marcus; int x; ◮ Zugriff auf Klassenelemente mit Punktoperator (.) ◮ Klassen und Objekte dienen der Abstraktion • genaue Implementierung nicht wichtig • zum Beispiel durch Bibliotheken ◮ Benutzer soll so wenig wissen wie möglich • black-box Programmierung • nur Ein- und Ausgabe müssen bekannt sein ◮ Richtiger Zugriff muss sichergestellt werden ◮ Schlüsselwörter private, public, und protected Marcus.name = "Marcus Page"; Marcus.lernen(); ◮ private (Standard) • Zugriff nur von Methoden der gleichen Klasse ◮ Achtung: Zugriff muss erlaubt sein • sonst Fehlermeldung von Compiler ◮ public • erlaubt Zugriff von überall ◮ Achtung: An Objekte zuweisen, nicht an Klassen int = 5; // Fehler Student = "Marcus Page"; // Fehler 187 ◮ protected • teilweiser Zugriff von außen (später) 188 Beispiel 2 Beispiel 1 2 3 4 5 6 7 8 9 class Dreieck { private: double x[2]; double y[2]; double z[2]; public: double flaeche(); }; ◮ Dreieck in R2 mit Eckpunkten x,y,z ◮ Benutzer kann Funktion flaeche aufrufen ◮ Benutzer kann Daten x,y,z nicht direkt verändern • get/set Funktionen in public-Bereich einbauen ◮ Benutzer muss nicht wissen wie Daten intern verwaltet werden • Kann interne Datenstruktur später verändern • Dreieck kann auch durch einen Punkt und zwei Vektoren abgespeichert werden 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <string> using namespace std; class Student { private: // Kann auch weggelassen werden string studiengang; public: // Ab hier alle Members public! string name; int matrikelnummer; void lernen(); void testSchreiben(); }; int main() { Student Marcus; Marcus.name = "Marcus Page"; Marcus.matrikelnummer = 55542555; Marcus.studiengang = "Mathematik"; } ◮ Fehler in Zeile 19: std::string Student::studiengang is private 189 190 Klassenmethoden implementieren 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class Student { public: string name; int matrikelnummer; void lernen(); void testSchreiben(); }; Klassen und Strukturen ◮ Struktur: • Zusammenfassung elementarer Datentypen void Student::lernen() { cout << "oh mann ..." << endl; } (wie int,double) zu einem Gesamtdatentyp • Können von Funktionen manipuliert werden void Student::testSchreiben() { cout << "geschafft!" << endl; } ◮ Klasse: • Enthält neben den Daten auch noch Methoden, welche diese manipulieren int main() { Student Marcus; Marcus.lernen(); Marcus.testSchreiben(); } ◮ Realisierung von Strukturen in C mit struct • Keine Funktionen in Struktur erlaubt ◮ Realisierung von Klassen in C++ mit class ◮ Ausgabe: oh mann ... ◮ ACHTUNG: struct in C 6= struct in C++ • struct in C++ wie class, nur sind alle Members geschafft! ◮ Implementierung wie bei anderen Funktionen standardmäßig public! ◮ Zugehörigkeit zur Klasse durch (::) • Student :: testSchreiben() ◮ Deklaration auch in Header-Datei möglich (nächste VO) 191 192