! "eine Zeichenkette\nmit Doppelapostroph \" und Backslash \\"

Ähnliche Dokumente
1.2. Datentypen (Konstantentypen)

C++11. exportieren ihre Aufzählungsbezeichner in den umgebenden Bereich (name clashes) schwach typisiert (z.b. keine forward Deklaration möglich)

C++11. Objektorientierte Programmierung mit C++ enum classes ("strong enums") sind stark typisiert und scoped :

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

0. Einführung & Motivation

Objektorientierte Programmierung mit C Datentypen (Strukturtypen)! p.name = "Willibald Wusel";

F Zeiger, Felder und Strukturen in C

Praxisorientierte Einführung in C++ Lektion: "Das Schlüsselwort explicit"

Einführung in C. EDV1-04C-Einführung 1

OMSI / Teil 1 / C++ Andreas Blunk. 5. April 2006, Berlin

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Java Einführung Objekt-Datentypen und Strings. Kapitel 8 und 9

Repetitorium Programmieren I + II

Methoden und Wrapperklassen

Vorkurs C++ Programmierung

Typ : void* aktuelle Parameter Pointer von beliebigem Typ

Algorithmen und Programmierung II

Vorlesungsprüfung Programmiersprache 1

2. Programmierung in C

Objektorientierte Programmierung mit C++ Dr. K. Ahrens

Arrays (Felder/Vektoren)

C-Kurs 2011: Arrays, Strings, Pointer

1.4. Funktionen. Objektorientierte Programmierung mit C++

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

C-Kurs 2010 Pointer. 16. September v2.7.3

K Ergänzungen zur Einführung in C

n 1. Grundzüge der Objektorientierung n 2. Methoden, Unterprogramme und Parameter n 3. Datenabstraktion n 4. Konstruktoren n 5. Vordefinierte Klassen

Lambda-Funktionen. Lambda-Funktionen. Lambda-Funktionen sollen

Informatik. Strukturen und Aufzählungstypen. Vorlesung

! können default arguments haben: ein Endstück der Argumentliste einer Deklaration mit Wertevorgaben

C-Crashkurs. Praktikum Systemmanagement und Sicherheit

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Probeklausur. Musterlösung

Teil 5: Zeiger, Felder, Zeichenketten Gliederung

Variablen in C++ Einfache Variablen Strukturen Arrays und Zeichenketten Zeiger und Referenzen Parameter Dynamische Speicherverwaltung

Tag 4 Repetitorium Informatik (Java)

Informatik II. Woche 10, Giuseppe Accaputo

Informatik II. Woche 15, Giuseppe Accaputo

Einleitung Typsystem Typisierung Zusammenfassung Literatur. Typisierung. Effiziente Programmierung. Thomas Schnieders

Java I Vorlesung 6 Referenz-Datentypen

C++11. neu in C++11: range-based for. Objektorientierte Programmierung mit C++ Ersetzung durch: 1. Elementares C++ int array[] = { 1, 2, 3, 4, 5 };

Informatik I (D-ITET)

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Repetitorium Programmieren I + II

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

0. Einführung & Motivation

Programmierkurs. Steffen Müthing. November 16, Interdisciplinary Center for Scientific Computing, Heidelberg University

C++ Kurs Teil 3. Standard Template Library (STL) Kommunikation mit der shell Hyper Text Markup Language (HTML)

C++ Kurs Teil 1. Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen

INE1 Arrays, Zeiger, Datenstrukturen

Teil 5: Felder, Zeiger, Zeigerarithmetik Gliederung

Objektorientierte Programmierung mit C++

Variablen. int Flugzeug. float. I write code Hund. String. long. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

Bereits behandelt: Einfache Datentypen / Variablen. Schleifen und Verzweigungen. Funktionen. Heute: Felder, Zeiger, Referenzen. Freispeicherverwaltung

Arrays. Einleitung. Deklarieren einer Array Variablen

Ein erstes Java-Programm

C++ Teil 5. Sven Groß. 8. Mai IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 8. Mai / 16

C++ Teil 5. Sven Groß. 12. Nov IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16

Informatik I Eprog HS11

Aufgabenblatt 11 Musterlösung

Strukturen in C. Strukturen stellen eine Zusammenfassung von Datenelementen unterschiedlichen Typs unter einem Namen dar.

Grundlagen der Programmierung

Grundlagen der OO- Programmierung in C#

Zeiger, Arrays und Strings in C und C++

Informatik I Eprog HS10

initializer lists (nicht für Referenzen... unklar warum...)

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Zeiger & Co. Verwendung und Zeigerarithme5k. thorsten möller - informa5k.unibas.ch/lehre/fs13/cs109/03- c++- zeiger.pdf. Strukturen. enum.

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Tag 4 Repetitorium Informatik (Java)

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Grundelemente objektorientierter Sprachen (1)

2. Programmierung in C

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

Grundelemente objektorientierter Sprachen (1)

Java Referenzdatentypen genauer betrachtet

C++ Teil 5. Sven Groß. 16. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16

Betriebssysteme, Rechnernetze und verteilte Systeme 1. Crashkurs C (2)

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen

Einführung in C ++ und die Objektorientierte Programierung

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff.

Variablen und Parameter

Felder - Arrays. Typ feldname[] = new Typ[<ganze Zahl >]; Beispiel: double vektor[] = new double[5]; auch eine Initialisierung ist möglich.

Informatik II Prüfungsvorbereitungskurs

Einstieg in die Informatik mit Java

Die abstrakte Klasse Expression:

Einstieg in die Informatik mit Java

C++ vs. Java. Hello world! Java C++ class HelloWorld { static public void main(string args) { System.out.println("Hello World!

Informatik 1 ( ) D-MAVT F2010. Pointer, Structs, Sortieren. Yves Brise Übungsstunde 6

Inhalt. 4.5 Arbeit mit Zeigern (engl. Pointer)

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

Unterlagen. CPP-Uebungen-08/

Bereits behandelt: Einfache Datentypen / Variablen. Schleifen und Verzweigungen. Funktionen. Heute: Felder, Zeiger, Referenzen. Freispeicherverwaltung

Programmieren in Java

Transkript:

1.2. Datentypen Zeichenketten: Zeichenkettenliterale wie»üblich«"eine Zeichenkette\nmit Doppelapostroph \" und Backslash \\" werden als 0-terminierte char-felder realisiert char* hello = "Hello, World"; hello H e l l o, W o r l d \0 57

1.2. Datentypen (Zeichenketten) int main (int argc, char* argv[]) // bzw. int main (int argc, char** argv) $ prog -o abc -s 123 argv p r o g \0 - o \0 a b c \0-1 s \0 2 3 \0 58

1.2. Datentypen (Zeichenketten) Damit ist bereits der Umgang mit Zeichenketten implizit mit allen Problemen der Zeiger belastet (und zusätzlich mit allen buffer overflow Problemen bei Operationen auf Zeichenfeldern) Außerdem sind die möglichen Operationen auf char[] C-legacy (<cstring>) und primitiv, z.b. strcpy == Kopieren von Zeichenketten etwa: void stringcopy (const char* source, char* dest) { while (*dest++=*source++); } 59

1.2. Datentypen (std::string) AUSWEG: Datentyp std::string (<string>) eine Standardklasse zur Verarbeitung von Strings etwa auf dem Niveau von java.lang.string mit der Möglichkeit der Initialisierung aus C-Strings std::string vorname = "bjarne"; und einer Vielzahl von Operationen (a la Java): std::string nachname = "Stroustrup"; 60

1.2. Datentypen (std::string) std::string name; // noch leer vorname[0]='b'; // unchecked vorname.at(0) = 'B'; // checked name = vorname + " " + nachname; if (name = "") std::cout << name << std::endl; int l = name.length(); // ohne 0-Byte "hallo" + ", World\n"; // ERROR string("hallo") + ", World\n"; // OK const char* cstring = name.c_str();... Vergleich, Suche, I/O... Ä http://de.cppreference.com 61

1.2. Datentypen Referenztypen: Eine Neuerung gegenüber C, Aliasnamen für Objekte mit Referenzsemantik ähnlich zur primären Objektsemantik von Java, aber für alle Typen (incl. build-in Typen) es gibt KEINE 'Nullreferenz' in Anlehnung an die Syntax von Zeigervereinbarungen int i=42; // int& ri; // ERROR: Referenzen MÜSSEN initialisiert werden int& ri = i; // i alias ri class X{ } x; X& y=x; // zwei Namen für ein Objekt 62

1.2. Datentypen Konstantentypen: Ein Typ T wird durch den Präfix const zu einem Konstantentyp, Objekte solcher Typen sind unveränderlich (per statischer Kontrolle durch den Compiler) für Argumente von Funktionen bedeutet dies, dass die Funktion 1. die (nachprüfbare) Zusicherung gibt, dieses Argument NICHT zu verändern 2. beim Aufruf für das Argument auch konstante Objekte benutzt werden dürfen (was für non-const nicht erlaubt ist, weil ja die Funktion keine Zusicherung gegeben hat und daher...) const double pi=3.1415926; double somemathfkt(double); const double x = somemathfkt(pi); // call by value 63

1.2. Datentypen (Konstantentypen) Konstante Objekte müssen initialisiert werden (weil eine spätere Zuweisung nicht erlaubt ist) konstante Objekte können auch über Zeiger nicht verändert werden, weil die Adresse einer const T Variablen vom Typ const T* ist double* dp = π // ERROR *dp = 33.3; const double* cdp = π *cdp = 33.3; // ERROR 64

1.2. Datentypen (Konstantentypen) bei Zeigern ist wohl zu unterscheiden zwischen der constness des Zeigers selbst int * const constant_pointer = &someint; und der constness des referenzierten Objektes (Feldes) const int * pointer_to_constant; const int * const constant_pointer_to_constant = ; 65

1.2. Datentypen (Konstantentypen) Referenzen (selbst) sind implizit const, es gibt jedoch Referenzen auf Konstantentypen Wichtigste Anwendung: call by reference in-parameter T t; void foo(t& pt) { pt.change(); } foo(t); // call by reference: t itself changes const T ct; foo(ct); // ERROR 66

1.2. Datentypen (Konstantentypen) void foo(const T& pct) { // pct.change(); ERROR pct.read_only(); } const T ct; foo(ct); // OK class X{ public: void foo() const; void bar(); }; X x; const X cx; x.foo(); x.bar(); cx.foo(); /* OK */ cx.bar() // ERROR 67

1.2. Datentypen Strukturtypen (a la C): heterogene Wertekombinationen unter einem Typnamen struct Person { std::string name; int age; double salary; long phone_no; } p; sizeof(person) name... abhängig vom alignment age:... salary:... phone_no:... 68