C++ lernen und verstehen. Die Sprache und ihr Strukturen (eBook)

eBook Download: PDF
2003 | 1. Auflage
599 Seiten
C & L Computer- und Literaturverlag GmbH
978-3-936546-01-9 (ISBN)
Systemvoraussetzungen
10,00 inkl. MwSt
  • Download sofort lieferbar
  • Zahlungsarten anzeigen
Wolfgang Soltendick
C++ lernen und verstehen
Die Sprache und ihre Strukturen

Moderne Softwareentwicklung findet größtenteils in C++ statt. Der Grund dafür ist die Mächtigkeit dieser Programmiersprache. Mit der Vielzahl der Möglichkeiten geht aber auch eine entsprechende Komplexität einher. Aus diesem Grund hat C++ den Ruf, schwer erlernbar zu sein. Daß dem nicht so sein muß, zeigt dieses Buch. Es ist eine verständlich aufgebaute Einführung in die Sprache für jeden, der gerade erste Schritte in der Programmierung macht.

Der Autor erklärt Schritt für Schritt alle wichtigen Sprachelemente von C++ und die Konzepte der objektorientierten Programmierung anhand von Beispielen. Begonnen wird mit dem grundlegenden Aufbau eines Programms, woran sich die Beschreibungen von Entscheidungs- und Schleifenkonstruktionen anschließen. Danach folgen die Erläuterungen von Datenstrukturen und Funktionen. Letztere werden zu Klassen zusammengefügt, mit denen der Bogen zur objektorientierten Sichtweise gespannt wird. Die Vorstellung von Vektoren, die eine besonders einfache Zugriffsmöglichkeit für die Verwaltung von Daten bieten, der Einsatz von Zeigern, virtuelle Funktionen und der Einsatz des this-Zeigers sind weitere Themen. Datenströme zum Einlesen und Abspeichern von Eingaben werden ausführlich besprochen. Die Vererbung von Eigenschaften und Ableitung von Klassen, einer der Grundpfeiler der objektorientierten Programmierung, wird ausführlich in allen Facetten diskutiert. Im vorletzten Kapitel erfährt der Leser näheres über Befehlszeilenargumente, mit denen beim Aufruf eines Programms Informationen von der Kommandozeile übernommen werden. Der Fehlerbehandlung, also der Programmierung von Exceptions, ist das letzte Kapitel gewidmet.

Das Buch ist sehr gut für das Selbststudium oder als Ergänzung zu einem Kurs geeignet, denn jedes Kapitel schließt mit Programmieraufgaben zu den besprochenen Themen ab, die Lösungen sind im Anhang des Buchs abgedruckt.

Die Themen:

Grundlagen des Umgangs mit Visual C++ und Borland C++ Builder
Programmaufbau und Schleifenkonstruktionen
Datenstrukturen und Funktionen
Aufbau und Ableitung von Klassen
Vektoren und Felder als Sammlung von Daten
Zeiger und Zeigerkonstruktionen
Virtuelle Funktionen und this-Zeiger
Das Vererbungsmodell
Der Einsatz von Datenströmen
Fehlerbehandlung mit Exceptions

Inhalt 6
Vorwort 16
1 Einführung in die C++-Programmierung 18
1.1 Compiler-Aufrufe 18
1.1.1 Borland C++ Builder 18
1.1.2 Microsoft Visual C++ 20
1.1.3 Linux 23
1.2 Zusammenfassung 25
2 Einführung 26
2.1 Prozedurale Sprachen 26
2.2 Objektorientierte Sprachen 27
2.3 Hauptelemente objektorientierter Sprachen 28
2.3.1 Objekte 28
2.3.2 Klassen 29
2.3.3 Vererbung 29
2.3.4 Wiederverwendbarkeit 29
2.3.5 Neue Datentypen 30
2.3.6 Polymorphismus 30
2.3.7 Überlagerung 30
2.4 Zusammenfassung 31
3 Grundlagen der Sprache C++ 32
3.1 Der Programmaufbau 32
3.1.1 Präprozessorbefehle 32
3.1.2 Leerzeilen und Zwischenräume 33
3.1.3 Funktionen 33
3.1.4 Anweisungen 34
3.2 Die Ausgabe des Programms 35
3.3 Kommentare 36
3.4 Variablen 37
3.4.1 Ganzzahlige Variablen 37
3.4.2 Gleitkommavariablen 40
3.4.3 Konstanten 41
3.4.4 Zeichenvariablen 41
3.4.5 Übersicht 42
3.4.6 Typumwandlungen 45
3.5 Escape-Sequenzen 48
3.6 Operatoren zur Manipulation der Ausgabe 49
3.7 #define 51
3.8 Die Eingabe 52
3.9 Arithmetische Operatoren 53
3.9.1 Grundoperatoren 53
3.9.2 Restoperator 54
3.9.3 Zuweisungsoperatoren 55
3.9.4 Inkrement- und Dekrementoperator 55
3.10 Bibliotheksfunktionen 58
3.11 Zusammenfassung 60
3.12 Aufgaben 61
4 Entscheidungen 62
4.1 Operatoren für Vergleiche 62
4.2 Die if-Anweisung 64
4.3 Die if..else-Anweisung 66
4.4 Die switch-Anweisung 70
4.5 Der Bedingungsoperator 72
4.6 Logikoperatoren 73
4.6.1 Der logische UND-Operator 74
4.6.2 Der logische ODER-Operator 75
4.6.3 Der logische NICHT-Operator 75
4.6.4 Bewertungsreihenfolge 77
4.7 Zusammenfassung 78
4.8 Aufgaben 79
5 Schleifen 80
5.1 Die for-Schleife 80
5.2 Die while-Schleife 89
5.3 Die do..while-Schleife 92
5.4 Hinweise zum Einsatz der Schleifen 94
5.5 Anweisungen zur Schleifensteuerung 95
5.5.1 Die Anweisung break 95
5.5.2 Die Anweisung continue 98
5.5.3 Die Anweisung goto 100
5.6 Zusammenfassung 100
5.7 Aufgaben 101
6 Strukturen und Aufzählungen 102
6.1 Strukturen 102
6.1.1 Die erste Struktur 103
6.1.2 Die Beschreibung einer Struktur 104
6.1.3 Die Definition der Struktur 104
6.1.4 Der Zugriff auf die Komponenten 105
6.1.5 Weitere Eigenschaften 106
6.1.6 Ein weiteres Beispiel 110
6.1.7 Addition zweier Strukturen 111
6.1.8 Strukturen innerhalb von Strukturen 112
6.1.9 Ausblick 115
6.2 Der Aufzählungstyp 115
6.2.1 Monate 115
6.2.2 Ein boolescher Datentyp 117
6.2.3 Zahlenwert zuweisen 120
6.2.4 Ausgabe 121
6.3 Zusammenfassung 122
6.4 Aufgaben 123
7 Funktionen 124
7.1.1 Das Programm 124
7.1.2 Die Deklaration der Funktion 125
7.1.3 Aufruf der Funktion 126
7.1.4 Die Definition der Funktion 126
7.1.5 Bibliotheksfunktionen 127
7.1.6 Funktionen ohne separate Deklaration 127
7.2 Übergabe von Argumenten 129
7.2.1 Konstanten 129
7.2.2 Variablen 131
7.2.3 Strukturen 133
7.3 Rückgabewerte 135
7.3.1 Das Programm 136
7.3.2 Die Anweisung »return« 137
7.3.3 Strukturen als Rückgabewerte 139
7.4 Referenzen 141
7.4.1 Übergabe einfacher Datentypen 142
7.4.2 Übergabe von Strukturen 147
7.4.3 Weitere Anmerkungen 148
7.5 Überlagerte Funktionen 150
7.5.1 Unterschiedliche Parameteranzahl 150
7.5.2 Unterschiedliche Parametertypen 152
7.6 Inline-Funktionen 155
7.7 Standardargumente 157
7.8 Speicherklassen 159
7.8.1 Automatische Variablen 159
7.8.2 Externe Variablen 162
7.8.3 Statische Variablen 164
7.8.4 Übersicht 167
7.9 Referenzrückgabe 167
7.10 Zusammenfassung 169
7.11 Aufgaben 170
8 Klassen und Objekte 172
8.1 Einführung 172
8.1.1 Das Beispielprogramm 172
8.1.2 Der Aufruf 173
8.1.3 Die Festlegung der Klasse 174
8.1.4 private und public 175
8.1.5 Die Verwendung der Klasse 176
8.2 Komplexere Klassen 177
8.3 Konstruktoren 179
8.4 Destruktoren 183
8.5 Objekte als Funktionsargumente 183
8.5.1 Überlagerte Konstruktoren 185
8.5.2 Komponentenfunktionen außerhalb der Klasse definieren 186
8.5.3 Objekte als Argumente 187
8.6 Objekte als Rückgabewerte 188
8.7 Ein Hütchen-Spiel 191
8.8 Strukturen und Klassen 194
8.9 Speicherplatz 196
8.10 Statische Klassendaten 196
8.11 Hintergründe 200
8.12 Zusammenfassung 202
8.13 Aufgaben 203
9 Vektoren und Arrays 204
9.1 Grundlagen 204
9.1.1 Ein erstes Beispiel 204
9.1.2 Definition des Vektors 205
9.1.3 Die Elemente des Vektors 205
9.1.4 Zugriff auf die Elemente des Vektors 206
9.1.5 Ein weiteres Beispiel 207
9.1.6 Initialisierung von Vektoren 209
9.1.7 Mehrdimensionale Vektoren 210
9.1.8 Übergabe von Vektoren 215
9.1.9 Vektoren aus Strukturen 217
9.2 Vektoren in Klassen 220
9.3 Vektoren aus Objekten 224
9.3.1 Das Beispiel 224
9.4 Zeichenketten 228
9.4.1 Variablen 228
9.4.2 Überlauf verhindern 229
9.4.3 Konstanten 232
9.4.4 Einlesen von Zeichenketten mit Leerzeichen 232
9.4.5 Mehrzeilige Zeichenketten 234
9.4.6 Bestimmung der Länge 235
9.4.7 Kopieren einer Zeichenkette 236
9.4.8 Vektoren aus Zeichenketten 238
9.4.9 Zeichenketten in einer Klasse 240
9.4.10 Eine String-Klasse 241
9.5 Zusammenfassung 245
9.6 Aufgaben 246
10 Überlagerung von Operatoren 248
10.1 Unäre Operatoren 249
10.1.1 Das Beispiel 249
10.1.2 Das Schlüsselwort » operator« 251
10.1.3 Argumente des Operators 251
10.1.4 Rückgabewerte von Operatoren 252
10.1.5 Temporäre Objekte ohne Namen 254
10.1.6 Beschränkungen 256
10.2 Binäre Operatoren 258
10.2.1 Arithmetische Operatoren 258
10.2.2 Verkettung von Zeichenketten 261
10.2.3 Mehrfache Überlagerung 264
10.2.4 Vergleiche 265
10.2.5 Zuweisungsoperatoren 269
10.3 Umwandlung von Daten 272
10.3.1 Interne Datentypen 273
10.3.2 Objekte und interne Datentypen 274
10.3.3 Objekte unterschiedlicher Typen 287
10.4 Weitere Anmerkungen 295
10.4.1 Verwendung entsprechender Bedeutungen 295
10.4.2 Verwendung ähnlicher Syntax 296
10.4.3 Zurückhaltung üben 296
10.4.4 Unklarheiten vermeiden 297
10.4.5 Nicht überlagerbare Operatoren 297
10.5 Zusammenfassung 298
10.6 Aufgaben 299
11 Vererbung 300
11.1 Basisklassen und davon abgeleitete Klassen 300
11.1.1 Das Beispiel 300
11.1.2 Angabe der abgeleiteten Klasse 302
11.1.3 Zugriff auf Komponenten der Basisklasse 303
11.1.4 Die Zugriffsangabe »protected« 304
11.2 Konstruktoren in abgeleiteten Klassen 305
11.3 Komponentenfunktionen überschreiben 308
11.4 Hierarchie von Klassen 312
11.5 Arten der Vererbung 316
11.5.1 Zugriffsmöglichkeiten 316
11.5.2 Klassen und Strukturen 318
11.6 Weitere Vererbung 319
11.7 Mehrfachvererbung 323
11.7.1 Komponentenfunktionen bei mehrfacher Vererbung 324
11.7.2 Konstruktoren 328
11.8 Mehrdeutigkeit bei mehrfacher Vererbung 334
11.9 Klassen in Klassen 336
11.10 Programmentwicklung 342
11.11 Zusammenfassung 343
11.12 Aufgaben 344
12 Zeiger 346
12.1 Adressen und Zeiger 346
12.1.1 Der Adreßoperator »& «
12.1.2 Zeigervariablen 349
12.1.3 Zugriff auf die Speicherstelle(n) 351
12.1.4 Zeiger auf void 353
12.2 Vektoren und Zeiger 354
12.3 Funktionen und Zeiger 357
12.3.1 Aufrufe mit einfachen Variablen 357
12.3.2 Vektoren als Aufrufparameter 359
12.3.3 Sortieren von Vektoren 362
12.4 Zeichenketten und Zeiger 366
12.4.1 Zeichenkettenkonstanten 366
12.4.2 Argumente von Funktionen 368
12.4.3 Zeichenketten kopieren 369
12.4.4 Bibliotheksfunktionen für Zeichenketten 371
12.4.5 Vektoren aus Zeigern 372
12.5 Die Speicherverwaltung 373
12.5.1 Der Operator »new« 374
12.5.2 Der Operator »delete« 375
12.5.3 »new« in Objekten 376
12.6 Zeiger auf Objekte 379
12.6.1 Das Beispiel 379
12.6.2 Zugriff auf die Komponenten 380
12.6.3 Weiterer Einsatz von »new« 381
12.6.4 Vektor aus Zeigern auf Objekte 383
12.7 Verkettete Listen 386
12.7.1 Kette aus Zeigern 386
12.7.2 Element hinzufügen 388
12.7.3 Ausgabe der Liste 390
12.7.4 Sich selbst enthaltende Klassen 391
12.7.5 Die Hauptfunktion 392
12.7.6 Erweiterungen 392
12.8 Zeiger auf Zeiger 393
12.8.1 Das Beispielprogramm 393
12.8.2 Die Sortierung 396
12.8.3 Zeiger auf Zeiger 397
12.8.4 Der Vergleich von Zeichenketten 398
12.8.5 Zeiger auf Zeiger auf Zeiger auf... 398
12.9 Fehlerbehebung bei Zeigern 399
12.10 Zusammenfassung 402
12.11 Aufgaben 403
13 Weitere Eigenschaften von C++ 404
13.1 Virtuelle Funktionen 404
13.1.1 Einführung 404
13.1.2 Zugriff auf nicht virtuelle Komponentenfunktionen mit Zeigern 405
13.1.3 Zugriff auf virtuelle Komponentenfunktionen mit Zeigern 407
13.1.4 Späte Bindung 408
13.1.5 Rein virtuelle Funktionen 409
13.1.6 Eine erweiterte Klasse für Personen 410
13.1.7 Abstrakte Klassen 415
13.1.8 Virtuelle Basisklassen 415
13.2 Freundfunktionen 417
13.2.1 ... als Brücken 417
13.2.2 ... zur Überwindung von Grenzen 419
13.2.3 ... zur besseren Lesbarkeit 424
13.3 Freundklassen 428
13.4 Statische Funktionen 429
13.4.1 Das Beispiel 430
13.4.2 Zugriff auf statische Funktionen 431
13.4.3 Kennzeichnung der Objekte 432
13.4.4 Destruktoren 433
13.5 Zuweisung und Initialisierung durch Kopieren 433
13.5.1 Überlagerung des Zuweisungsoperators 434
13.5.2 Der Kopiekonstruktor 438
13.5.3 Erweiterung der Zeichenkettenklasse 443
13.6 Der this-Zeiger 448
13.6.1 Zugriff auf Komponentendaten 449
13.6.2 Rückgabe von Werten 450
13.6.3 Noch eine Erweiterung der Zeichenkettenklasse 452
13.7 Zusammenfassung 456
13.8 Aufgaben 457
14 Datenströme und Dateien 458
14.1 Datenströme 458
14.1.1 Die Klassenhierarchie 458
14.1.2 Klassen für Datenströme 459
14.2 Ein- und Ausgabe von Zeichenketten 460
14.2.1 Schreiben von Zeichenketten 460
14.2.2 Lesen von Zeichenketten 461
14.3 Ein- und Ausgabe von Zeichen 462
14.4 Ein- und Ausgabe von Objekten 463
14.4.1 Schreiben eines Objekts 463
14.4.2 Einlesen eines Objekts 464
14.4.3 Passende Datenstrukturen 465
14.5 Speichern und Lesen mehrerer Objekte 466
14.5.1 Das Beispiel 466
14.5.2 Die Klasse fstream 468
14.6 Dateizeiger 469
14.6.1 Festlegen einer absoluten Position 470
14.6.2 Angabe eines Abstands 470
14.6.3 Bestimmung der aktuellen Position 472
14.7 Komplexere Ein- und Ausgaben 473
14.7.1 Das Beispiel 473
14.7.2 Komponentenfunktionen 477
14.7.3 Dateien schließen 478
14.7.4 Ausblick 478
14.8 Fehlerbearbeitung 478
14.9 Einlese- und Einfügeoperator überladen 480
14.10 Zusammenfassung 484
14.11 Aufgaben 485
15 Weitere Möglichkeiten 486
15.1 Befehlszeilenargumente 486
15.2 Projekte aus mehreren Dateien 489
15.2.1 Klassenbibliotheken 489
15.2.2 Projektorganisation 490
15.2.3 Die #include-Anweisung 490
15.2.4 Mehrere Quelltextdateien 491
15.2.5 Borland C++-Builder 492
15.2.6 Visual C++ 6 493
15.2.7 Linux 494
15.3 Zusammenfassung 495
15.4 Aufgaben 495
16 Exceptions – Ausnahmebehandlung 496
16.1 try und catch 497
16.2 Auslösen einer Exception mit throw 497
16.3 Ein erstes Beispiel 498
16.4 Exceptions ohne Behandlung 500
16.5 Verschachtelung von Exceptions 502
16.6 Routine zum Beenden des Programms 504
16.7 Einschränkung auslösbarer Exceptions 506
16.8 Exception-Objekte 508
16.9 Initialisierung der Objekte 510
16.10 Mehrere Exceptions behandeln 514
16.11 Alle Exceptions behandeln 516
16.12 Zusammenfassung 518
16.13 Aufgaben 519
A Lösungen 520
A.1 Lösungen zu Kapitel 3 520
A.2 Lösungen zu Kapitel 4 521
A.3 Lösungen zu Kapitel 5 523
A.4 Lösungen zu Kapitel 6 525
A.5 Lösungen zu Kapitel 7 526
A.6 Lösungen zu Kapitel 8 528
A.7 Lösungen zu Kapitel 9 532
A.8 Lösungen zu Kapitel 10 535
A.9 Lösungen zu Kapitel 11 538
A.10 Lösungen zu Kapitel 12 543
A.11 Lösungen zu Kapitel 13 545
A.12 Lösungen zu Kapitel 14 548
A.13 Lösungen zu Kapitel 15 551
A.14 Lösungen zu Kapitel 16 553
Stichwortverzeichnis 556

2 Einführung (S. 25-26)

In diesem Buch soll es um die Einführung in eine objektorientierte Programmsprache mit dem Namen C++ gehen. Doch wozu benötigt man überhaupt eine objektorientierte Sprache, denn die ersten Windows- Systeme und auch der Linux-Kernel sind nicht damit programmiert? Was hat C++ für Vorteile und was bedeuten die in Zusammenhang immer benutzen Begriffe Vererbung, Objekte und Klassen? Die Antworten stehen in diesem Buch in den nachfolgenden Kapiteln.

2.1 Prozedurale Sprachen

Zu den prozeduralen Sprachen gehören beispielsweise C und Pascal. In diesen wird durch jedem Befehl dem Computer mitgeteilt, was er zu tun hat, wie beispielsweise eine Berechnung auszuführen oder das entsprechende Ergebnis auszugeben. Aus diesem Grund enthält bei kleinen Programmen jede Zeile eine Anweisung, die Zeilen werden nacheinander abgearbeitet. In größeren Programmen dagegen werden einzelne Programmteile in Funktionen ausgelagert, die dann an bestimmten Stellen aufgerufen werden. Damit soll das Programm lesbarer werden, was sicherlich auch der Fall ist, wenn die Funktionen sinnvoll gegliedert sind. Wenn man mehrere Funktionen zusammenfaßt, faßt man sie in sogenannte Module zusammen. Sie lassen sich getrennt vom restlichen Programm übersetzen, so daß man mit ihnen Bibliotheken, bestehend aus Funktionen, realisieren kann. Bietet der Compiler die Möglichkeit, sie in das eigene Programm einzubinden, steht einem modularen Aufbau nichts mehr im Wege. Damit werden die Grundkonzepte der modularen Programmierung eingehalten. Allerdings stößt auch sie an ihre Grenzen, wenn die Programmme größer und komplexer werden.

Bei diesem Typ von Programmiersprachen liegt das Hauptaugenmerk auf den Anweisungen, die beschreiben, was alles zu erledigen ist. Die Daten spielen dabei eine eher untergeordnete Rolle, obwohl sie es sind, mit denen die einzelnen Funktionen etwas ausführen. Denn ohne Daten würden beispielsweise die Funktionen zur Verwaltung ins Leere laufen, das heißt, sie kommen nicht ohne aus. Die Daten werden mit den Funktionen eingelesen, ausgewertet und auch ausgegeben. Aber wie können die Daten beschaffen sein?

Häufig werden die Daten in globalen Variablen innerhalb des Programms festgelegt. Das Wort global bedeutet dabei, daß die Variablen außerhalb der Funktionen in einem Programm deklariert werden. Damit sind sie für alle Funktionen sichtbar, die auf sie dann zugreifen. Doch es sind in prozeduralen Sprachen auch lokale Variablen vorhanden, die in den jeweiligen Funktionen deklariert werden. Diese sind nur in der jeweiligen Funktion sichtbar, so daß andere auf sie nicht zugreifen können. Der Hauptgrund, warum man schließlich zum Einsatz der objektorientierten Sprachen übergegangen ist, besteht letztendlich darin, daß sie die Wirklichkeit besser abbilden. Allerdings funktioniert das nur zufriedenstellend, wenn der Programmierer zu diesem Schritt in der Lage ist und den richtigen Ansatz gewählt hat.

2.2 Objektorientierte Sprachen

Wie zuvor angedeutet, soll der objektorientierte Ansatz die Wirklichkeit besser abbilden können. In diesem Konzept werden die Daten und die damit arbeitenden Funktionen zu einer Einheit zusammengefaßt. Diese wird als Objekt bezeichnet.

Die in einem Objekt enthaltenen Funktionen werden auch als Komponentenfunktionen oder Methoden bezeichnet. Sie sind in der Regel die einzigen Funktionen, mit deren Hilfe man auf die Daten zugreifen kann. Das bedeutet andererseits, daß die Daten so geschützt beziehungsweise verborgen sind, daß sie nicht unbeabsichtigt geändert werden können, dazu muß man eine entsprechende Funktion aufrufen. Die Daten sind also im Objekt eingekapselt.

In einem C++-Programm gibt es in der Regel mehrere unterschiedliche Objekte, die gegenseitig die Komponentenfunktionen der jeweils anderen Objekte aufrufen. Wie das erfolgt, hängt natürlich vom jeweiligen Anwendungszweck ab. In einigen anderen objektorientierten Sprachen werden diese Funktionen auch Methoden genannt und die Datenelemente als Instanzvariablen bezeichnet. Wird eine Komponentenfunktion aufgerufen, spricht man dann vom »Senden einer Nachricht«. Diese Begriffe werden aber bei C++ nicht verwendet.

Erscheint lt. Verlag 1.1.2003
Sprache deutsch
Themenwelt Informatik Programmiersprachen / -werkzeuge C / C++
ISBN-10 3-936546-01-0 / 3936546010
ISBN-13 978-3-936546-01-9 / 9783936546019
Haben Sie eine Frage zum Produkt?
PDFPDF (Adobe DRM)
Größe: 4,6 MB

Kopierschutz: Adobe-DRM
Adobe-DRM ist ein Kopierschutz, der das eBook vor Mißbrauch schützen soll. Dabei wird das eBook bereits beim Download auf Ihre persönliche Adobe-ID autorisiert. Lesen können Sie das eBook dann nur auf den Geräten, welche ebenfalls auf Ihre Adobe-ID registriert sind.
Details zum Adobe-DRM

Dateiformat: PDF (Portable Document Format)
Mit einem festen Seiten­layout eignet sich die PDF besonders für Fach­bücher mit Spalten, Tabellen und Abbild­ungen. Eine PDF kann auf fast allen Geräten ange­zeigt werden, ist aber für kleine Displays (Smart­phone, eReader) nur einge­schränkt geeignet.

Systemvoraussetzungen:
PC/Mac: Mit einem PC oder Mac können Sie dieses eBook lesen. Sie benötigen eine Adobe-ID und die Software Adobe Digital Editions (kostenlos). Von der Benutzung der OverDrive Media Console raten wir Ihnen ab. Erfahrungsgemäß treten hier gehäuft Probleme mit dem Adobe DRM auf.
eReader: Dieses eBook kann mit (fast) allen eBook-Readern gelesen werden. Mit dem amazon-Kindle ist es aber nicht kompatibel.
Smartphone/Tablet: Egal ob Apple oder Android, dieses eBook können Sie lesen. Sie benötigen eine Adobe-ID sowie eine kostenlose App.
Geräteliste und zusätzliche Hinweise

Zusätzliches Feature: Online Lesen
Dieses eBook können Sie zusätzlich zum Download auch online im Webbrowser lesen.

Buying eBooks from abroad
For tax law reasons we can sell eBooks just within Germany and Switzerland. Regrettably we cannot fulfill eBook-orders from other countries.

Mehr entdecken
aus dem Bereich
Das umfassende Handbuch

von Torsten T. Will

eBook Download (2024)
Rheinwerk Computing (Verlag)
49,90
Das umfassende Handbuch

von Jürgen Wolf; René Krooß

eBook Download (2023)
Rheinwerk Computing (Verlag)
39,90
C++ lernen – professionell anwenden – Lösungen nutzen

von Ulrich Breymann

eBook Download (2023)
Carl Hanser Verlag GmbH & Co. KG
49,99