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

Documents pareils