pages/Kapitel02-page-01.svg

pages/Kapitel02-page-02.svg

pages/Kapitel02-page-03.svg

pages/Kapitel02-page-04.svg

pages/Kapitel02-page-05.svg

pages/Kapitel02-page-06.svg

pages/Kapitel02-page-07.svg

pages/Kapitel02-page-08.svg

pages/Kapitel02-page-09.svg

pages/Kapitel02-page-10.svg

pages/Kapitel02-page-11.svg

pages/Kapitel02-page-12.svg

pages/Kapitel02-page-13.svg

pages/Kapitel02-page-14.svg

pages/Kapitel02-page-15.svg

pages/Kapitel02-page-16.svg

pages/Kapitel02-page-17.svg

pages/Kapitel02-page-18.svg

pages/Kapitel02-page-19.svg

pages/Kapitel02-page-20.svg

pages/Kapitel02-page-21.svg

pages/Kapitel02-page-22.svg

pages/Kapitel02-page-23.svg

pages/Kapitel02-page-24.svg

pages/Kapitel02-page-25.svg

pages/Kapitel02-page-26.svg

pages/Kapitel02-page-27.svg

pages/Kapitel02-page-28.svg

pages/Kapitel02-page-29.svg

pages/Kapitel02-page-30.svg

pages/Kapitel02-page-31.svg

pages/Kapitel02-page-32.svg

pages/Kapitel02-page-33.svg

pages/Kapitel02-page-34.svg

pages/Kapitel02-page-35.svg

pages/Kapitel02-page-36.svg

pages/Kapitel02-page-37.svg

pages/Kapitel02-page-38.svg

pages/Kapitel02-page-39.svg

pages/Kapitel02-page-40.svg

pages/Kapitel02-page-41.svg

pages/Kapitel02-page-42.svg

pages/Kapitel02-page-43.svg

pages/Kapitel02-page-44.svg

pages/Kapitel02-page-45.svg

pages/Kapitel02-page-46.svg

pages/Kapitel02-page-47.svg

pages/Kapitel02-page-48.svg

pages/Kapitel02-page-49.svg

pages/Kapitel02-page-50.svg

pages/Kapitel02-page-51.svg

pages/Kapitel02-page-52.svg

pages/Kapitel02-page-53.svg

pages/Kapitel02-page-54.svg

pages/Kapitel02-page-55.svg

pages/Kapitel02-page-56.svg

pages/Kapitel02-page-57.svg

pages/Kapitel02-page-58.svg

pages/Kapitel02-page-59.svg

pages/Kapitel02-page-60.svg

pages/Kapitel02-page-61.svg

pages/Kapitel02-page-62.svg

pages/Kapitel02-page-63.svg

pages/Kapitel02-page-64.svg

pages/Kapitel02-page-65.svg

pages/Kapitel02-page-66.svg

pages/Kapitel02-page-67.svg

pages/Kapitel02-page-68.svg

pages/Kapitel02-page-69.svg

pages/Kapitel02-page-70.svg

pages/Kapitel02-page-71.svg

pages/Kapitel02-page-72.svg

pages/Kapitel02-page-73.svg

pages/Kapitel02-page-74.svg

pages/Kapitel02-page-75.svg

pages/Kapitel02-page-76.svg

pages/Kapitel02-page-77.svg

pages/Kapitel02-page-78.svg

pages/Kapitel02-page-79.svg

pages/Kapitel02-page-80.svg

pages/Kapitel02-page-81.svg

pages/Kapitel02-page-82.svg

pages/Kapitel02-page-83.svg

pages/Kapitel02-page-84.svg

Live-Demo Initialisierung 1

#include <iostream>

using namespace std;

int main() {
    
    int i = 12;
    
    // keine ganze Zahl, daher wird abgeschnitten: j = 23
    int j = 23.5;
    
    cout << i << "," << j  << endl;
    
    // compiliert nicht, da 23.5 kein int ist
    // und Informationsverlust droht bei der Umwandlung
    // von double in int:
//    int j3 {23.5};
    
    return 0;
}
compiler
Beispiel '02-Initialisierung.cpp' (Ausschnitt 1)

Live-Demo Initialisierung 2

#include <iostream>

using namespace std;

int main() {
    int i = 12;
    // keine ganze Zahl, daher wird abgeschnitten: j = 23
    int j = 23.5;
    
    // k ist nicht initialisiert
    // k kann irgendeinen Wert haben
    int k;

    cout << i << "," << j  << "," << k << endl;
    
    // alternative Definition in einer Zeile:
    int i2 = 12, j2 = 23.5;
    
    // Vorsicht! i3 nicht initialisiert!
    int i3, j3 = 100;

    cout << i3 << "," << j3  << endl;
    
    return 0;
}
compiler
Beispiel '02-Initialisierung.cpp' (Ausschnitt 2)

pages/Kapitel02-page-85.svg

pages/Kapitel02-page-86.svg

pages/Kapitel02-page-87.svg

pages/Kapitel02-page-88.svg

pages/Kapitel02-page-89.svg

pages/Kapitel02-page-90.svg

pages/Kapitel02-page-91.svg

pages/Kapitel02-page-92.svg

pages/Kapitel02-page-93.svg

pages/Kapitel02-page-94.svg

pages/Kapitel02-page-95.svg

pages/Kapitel02-page-96.svg

pages/Kapitel02-page-97.svg

pages/Kapitel02-page-98.svg

pages/Kapitel02-page-99.svg

pages/Kapitel02-page-100.svg

pages/Kapitel02-page-101.svg

pages/Kapitel02-page-102.svg

pages/Kapitel02-page-103.svg

Live-Demo Überlauf 1

#include <iostream>

using namespace std;

int main() {
    
    short m = 400, n = 100, k;
    k = m * n;
    
    cout << "k=" << k << endl;
    
    return 0;
}
compiler
Beispiel '02-Overflow.cpp (Ausschnitt 1)'

pages/Kapitel02-page-104.svg

pages/Kapitel02-page-105.svg

pages/Kapitel02-page-106.svg

pages/Kapitel02-page-107.svg

pages/Kapitel02-page-108.svg

pages/Kapitel02-page-109.svg

pages/Kapitel02-page-110.svg

pages/Kapitel02-page-111.svg

Live-Demo Überlauf 2

#include <iostream>

using namespace std;

int main() {
    // Hinweis: unsigned short m -> dann würde es passen
    
    m = 32767;
    cout << "m=" << m << endl;

    m = m + 1;
    cout << "m=" << m << endl;
    
    unsigned short us = 100;
    us = us - 101;

    cout << "us=" << us << endl;
        
    us = us + 1;
    cout << "us=" << us << endl;
    
    return 0;
}
compiler
Beispiel '02-Overflow.cpp (Ausschnitt 2)'

pages/Kapitel02-page-112.svg

pages/Kapitel02-page-113.svg

pages/Kapitel02-page-114.svg

pages/Kapitel02-page-115.svg

pages/Kapitel02-page-116.svg

pages/Kapitel02-page-117.svg

pages/Kapitel02-page-118.svg

pages/Kapitel02-page-119.svg

pages/Kapitel02-page-120.svg

pages/Kapitel02-page-121.svg

pages/Kapitel02-page-122.svg

pages/Kapitel02-page-123.svg

pages/Kapitel02-page-124.svg

pages/Kapitel02-page-125.svg

pages/Kapitel02-page-126.svg

pages/Kapitel02-page-127.svg

pages/Kapitel02-page-128.svg

pages/Kapitel02-page-129.svg

pages/Kapitel02-page-130.svg

pages/Kapitel02-page-131.svg

pages/Kapitel02-page-132.svg

pages/Kapitel02-page-133.svg

pages/Kapitel02-page-134.svg

pages/Kapitel02-page-135.svg

pages/Kapitel02-page-136.svg

pages/Kapitel02-page-137.svg

pages/Kapitel02-page-138.svg

pages/Kapitel02-page-139.svg

pages/Kapitel02-page-140.svg

pages/Kapitel02-page-141.svg

pages/Kapitel02-page-142.svg

pages/Kapitel02-page-143.svg

pages/Kapitel02-page-144.svg

pages/Kapitel02-page-145.svg

pages/Kapitel02-page-146.svg

pages/Kapitel02-page-147.svg

pages/Kapitel02-page-148.svg

pages/Kapitel02-page-149.svg

pages/Kapitel02-page-150.svg

pages/Kapitel02-page-151.svg

pages/Kapitel02-page-152.svg

pages/Kapitel02-page-153.svg

pages/Kapitel02-page-154.svg

Live-Demo Typumwandlung

#include <iostream>

using namespace std;

int main() {

    // character vs. ASCII-Code
    char x = 98;
    cout << x << " <-> " << static_cast<int>(x) << endl;
    
    // 1023 kann von unsigned char nicht dargestellt werden
    unsigned char uc = 1023;
    // um den Zahlen-Wert von uc zu bekommen:
    int uci = uc;
    cout << "uci=" << uci << endl;
       
    return 0;
}
compiler
Beispiel '02-Umwandlung.cpp (Ausschnitt 1)'

Live-Demo Typumwandlung 2

#include <iostream>

using namespace std;

int main() {
    // besser:
    // compiliert nicht, da 1023 nicht durch unsigned char
    // dargestellt werden kann:
//    unsigned char uc2 {1023};

    // 1023 passt natürlich auch nicht in einen signed char,
    // da Initialisierung mit "=" compiliert das aber:
//    signed char sc = 1023;

    // gleiches Problem: -123 ist kein unsigned
//    unsigned int ui = -123;
//    cout << "ui=" << ui << endl;

    // das wuerde nicht compilieren:
//    unsigned int ui2 {-123};
    
    return 0;
}
compiler
Beispiel '02-Umwandlung.cpp (Ausschnitt 2)'

pages/Kapitel02-page-155.svg

pages/Kapitel02-page-156.svg

pages/Kapitel02-page-157.svg

pages/Kapitel02-page-158.svg

pages/Kapitel02-page-159.svg

pages/Kapitel02-page-160.svg

pages/Kapitel02-page-161.svg

pages/Kapitel02-page-162.svg

pages/Kapitel02-page-163.svg

pages/Kapitel02-page-164.svg

pages/Kapitel02-page-165.svg

pages/Kapitel02-page-166.svg

pages/Kapitel02-page-167.svg

pages/Kapitel02-page-168.svg

pages/Kapitel02-page-169.svg

pages/Kapitel02-page-170.svg

pages/Kapitel02-page-171.svg

pages/Kapitel02-page-172.svg

pages/Kapitel02-page-173.svg

pages/Kapitel02-page-174.svg

pages/Kapitel02-page-175.svg

pages/Kapitel02-page-176.svg

pages/Kapitel02-page-177.svg

pages/Kapitel02-page-178.svg

pages/Kapitel02-page-179.svg

pages/Kapitel02-page-180.svg

pages/Kapitel02-page-181.svg

pages/Kapitel02-page-182.svg

pages/Kapitel02-page-183.svg

pages/Kapitel02-page-184.svg

pages/Kapitel02-page-185.svg

pages/Kapitel02-page-186.svg

pages/Kapitel02-page-187.svg

pages/Kapitel02-page-188.svg

pages/Kapitel02-page-189.svg

pages/Kapitel02-page-190.svg

pages/Kapitel02-page-191.svg

pages/Kapitel02-page-192.svg

pages/Kapitel02-page-193.svg

pages/Kapitel02-page-194.svg

pages/Kapitel02-page-195.svg

pages/Kapitel02-page-196.svg

pages/Kapitel02-page-197.svg

pages/Kapitel02-page-198.svg

pages/Kapitel02-page-199.svg

pages/Kapitel02-page-200.svg

pages/Kapitel02-page-201.svg

pages/Kapitel02-page-202.svg

pages/Kapitel02-page-203.svg

pages/Kapitel02-page-204.svg

pages/Kapitel02-page-205.svg

pages/Kapitel02-page-206.svg

pages/Kapitel02-page-207.svg

pages/Kapitel02-page-208.svg

pages/Kapitel02-page-209.svg

Live-Demo Limits

#include <iostream>
#include <limits>

using namespace std;

int main() {
    cout << "int: "
        << numeric_limits<int>::min() << " ... "
        << numeric_limits<int>::max() << endl;
    
    cout << "double: "
        << numeric_limits<double>::min() << " ... "
        << numeric_limits<double>::max() << endl;
    
    cout << "Anzahl Bytes von char: " << sizeof(char) << endl;
    cout << "Anzahl Bytes von int: " << sizeof(int) << endl;
    cout << "Anzahl Bytes von double: " << sizeof(double) << endl;
    
    
    int i = 10;
    cout << "sizeof(i)=" << sizeof(i) << endl;
    
    return 0; 
}
compiler
Beispiel '02-Limits.cpp'

Wissensspeicher 1

  • Ein Bezeichner …
    • ist der Name einer Variablen
    • folgt bestimmten Regeln, z. B. nur a-z, A-Z, 0-9 und _ sind erlaubt
    • darf u.a. kein Schlüsselwort sein
  • Datentypen …
    • haben Grenzen in Abhängigkeit von ihrer Größe: char vs. short vs. int vs. long (+ unsigned)
    • laufen über, wenn die Grenzen überschritten werden (wrap around)
    • können in einander umgewandelt werden. Achtung: mögl. Verlust von Informationen
  • Achtung bei Operationen mit mehreren Operanden unterschiedlicher Größer:

    Compiler wandelt Typen ggf. um → potentieller Verlust von Informationen

Demo - Implizite Typumwandlung

#include <iostream>

using namespace std;

int main() {
    {   // A
        int a = 1024;
        short b = 256, c = 1025;

        short result = b + c * a;
        cout << "A: result = " << result << endl;
    }
    {   // B
        int a = 1, b = 256, c = 1024;

        int result = b + a / 2 * c;
        cout << "B: result = " << result << endl;
    }
    return 0; 
}
compiler
Beispiel zum Einfluss von implizieter Typumwandlung auf das Ergebnis bei Operationen mit mehreren Operanden

Demo - Genauigkeit Fließkommazahlen

#include <iostream>
#include <iomanip>
#include <limits>

using namespace std;

int main() {
    float f = 0.1;
    double d = 0.1;

    cout << std::setprecision(6);
    cout << "f = " << f << "\nd = " << d << endl;
    cout << std::setprecision(32);
    cout << "f = " << f << "\nd = " << d << endl;
    
    return 0; 
}
compiler
Beispiel zur Genauigkeit von Fließkommadatentypen

pages/Kapitel02-page-210.svg

pages/Kapitel02-page-211.svg

pages/Kapitel02-page-212.svg

pages/Kapitel02-page-213.svg

pages/Kapitel02-page-214.svg

pages/Kapitel02-page-215.svg

pages/Kapitel02-page-216.svg

pages/Kapitel02-page-217.svg

pages/Kapitel02-page-218.svg

pages/Kapitel02-page-219.svg

pages/Kapitel02-page-220.svg

pages/Kapitel02-page-221.svg

pages/Kapitel02-page-222.svg

pages/Kapitel02-page-223.svg

pages/Kapitel02-page-224.svg

pages/Kapitel02-page-225.svg

pages/Kapitel02-page-226.svg

pages/Kapitel02-page-227.svg

pages/Kapitel02-page-228.svg

pages/Kapitel02-page-229.svg

pages/Kapitel02-page-230.svg

pages/Kapitel02-page-231.svg

pages/Kapitel02-page-232.svg

pages/Kapitel02-page-233.svg

pages/Kapitel02-page-234.svg

pages/Kapitel02-page-235.svg

pages/Kapitel02-page-236.svg

pages/Kapitel02-page-237.svg

pages/Kapitel02-page-238.svg

pages/Kapitel02-page-239.svg

pages/Kapitel02-page-240.svg

pages/Kapitel02-page-241.svg

Live-Demo Bool

#include <iostream>

using namespace std;

int main() {
    int a = 100;
    int b = 20;
    
    if (a < b) cout << "kleiner" << endl;
    if (a > b) cout << "groesser" << endl;
    if (a == b) cout << "gleich" << endl;
       
    return 0;
}
compiler
Beispiel '02-Bool.cpp' (Ausschnitt 1)

pages/Kapitel02-page-242.svg

pages/Kapitel02-page-243.svg

pages/Kapitel02-page-244.svg

pages/Kapitel02-page-245.svg

pages/Kapitel02-page-246.svg

pages/Kapitel02-page-247.svg

pages/Kapitel02-page-248.svg

pages/Kapitel02-page-249.svg

pages/Kapitel02-page-250.svg

Live-Demo Bool 2

#include <iostream>

using namespace std;

int main() {
    bool test = true;
    cout << "test=" << test << endl;
    
    test = 1;
    cout << "test=" << test << endl;
    
    // damit "true" und "false" ausgegeben wird, statt 1 und 0
    cout << boolalpha;
    cout << "test=" << test << endl;
     
    return 0;
}
compiler
Beispiel '02-Bool.cpp' (Ausschnitt 2)

Live-Demo Bool 3

#include <iostream>

using namespace std;

int main() {
    int a = 100, k = 123;
    
    bool c = k;
//    bool d {123}; // kompiliert nicht
    bool f = 0.1; // alles != 0 ist true

    cout << "c=" << c << ", f=" << f << endl;
    
    if (a) {
        cout << "a ist true" << endl;
        cout << "bla" << endl;
    }
    if (!a) cout << "a ist false" << endl;
     
    return 0;
}
compiler
Beispiel '02-Bool.cpp' (Ausschnitt 3)

pages/Kapitel02-page-251.svg

pages/Kapitel02-page-252.svg

pages/Kapitel02-page-253.svg

pages/Kapitel02-page-254.svg

pages/Kapitel02-page-255.svg

pages/Kapitel02-page-256.svg

pages/Kapitel02-page-257.svg

pages/Kapitel02-page-258.svg

pages/Kapitel02-page-259.svg

pages/Kapitel02-page-260.svg

pages/Kapitel02-page-261.svg

pages/Kapitel02-page-262.svg

pages/Kapitel02-page-263.svg

pages/Kapitel02-page-264.svg

pages/Kapitel02-page-265.svg

Live-Demo Felder 1

#include <iostream>

using namespace std;

int main() {
    int feld[5] = {1,2,3,4,5};
    
    cout << feld[0] << "," << feld[1] << "," << feld[2] << "," << feld[3] << "," << feld[4] << endl;

    // Zuweisung an Feld-Element
    feld[0] = 11;
    // Ausgabe von Feld-Element
    cout << feld[0] << endl;

    // Vorsicht! Bereichs-Überschreitung
    cout << feld[5] << endl;
    cout << feld[50000000] << endl;

    return 0;
}
compiler
Beispiel '02-Array.cpp' (Ausschnitt 1)

pages/Kapitel02-page-266.svg

pages/Kapitel02-page-267.svg

pages/Kapitel02-page-268.svg

pages/Kapitel02-page-269.svg

pages/Kapitel02-page-270.svg

pages/Kapitel02-page-271.svg

pages/Kapitel02-page-272.svg

pages/Kapitel02-page-273.svg

Live-Demo Felder 2

#include <iostream>

using namespace std;

int main() {
    int a = 5;
    int b[a];

    for (int i = 0; i < a; i++) {
        b[i] = i * i;
    }
    
    for (int i = 0; i < a; i++) {
        cout << "b[" << i << "] = " << b[i] << endl;
    }

    return 0;
}
compiler
Beispiel '02-Array.cpp' (Ausschnitt 2 mit -pedantic)

Live-Demo Felder 3

#include <iostream>

using namespace std;

int main() {
    int a = 5;
    int b[a];

    for (int i = 0; i < a; i++) {
        b[i] = i * i;
    }
    
    for (int i = 0; i < a; i++) {
        cout << "b[" << i << "] = " << b[i] << endl;
    }

    return 0;
}
compiler
Beispiel '02-Array.cpp' (Ausschnitt 2 ohne -pedantic)

pages/Kapitel02-page-274.svg

pages/Kapitel02-page-275.svg

pages/Kapitel02-page-276.svg

pages/Kapitel02-page-277.svg

pages/Kapitel02-page-278.svg

pages/Kapitel02-page-279.svg

pages/Kapitel02-page-280.svg

pages/Kapitel02-page-281.svg

pages/Kapitel02-page-282.svg

pages/Kapitel02-page-283.svg

pages/Kapitel02-page-284.svg

pages/Kapitel02-page-285.svg

pages/Kapitel02-page-286.svg

pages/Kapitel02-page-287.svg

pages/Kapitel02-page-288.svg

pages/Kapitel02-page-289.svg

pages/Kapitel02-page-290.svg

pages/Kapitel02-page-291.svg

pages/Kapitel02-page-292.svg

pages/Kapitel02-page-293.svg

pages/Kapitel02-page-294.svg

pages/Kapitel02-page-295.svg

pages/Kapitel02-page-296.svg

pages/Kapitel02-page-297.svg

pages/Kapitel02-page-298.svg

pages/Kapitel02-page-299.svg

pages/Kapitel02-page-300.svg

pages/Kapitel02-page-301.svg

pages/Kapitel02-page-302.svg

pages/Kapitel02-page-303.svg

pages/Kapitel02-page-304.svg

pages/Kapitel02-page-305.svg

pages/Kapitel02-page-306.svg

pages/Kapitel02-page-307.svg

pages/Kapitel02-page-308.svg

pages/Kapitel02-page-309.svg

pages/Kapitel02-page-310.svg

pages/Kapitel02-page-311.svg

pages/Kapitel02-page-312.svg

pages/Kapitel02-page-313.svg

pages/Kapitel02-page-314.svg

pages/Kapitel02-page-315.svg

pages/Kapitel02-page-316.svg

pages/Kapitel02-page-317.svg

pages/Kapitel02-page-318.svg

pages/Kapitel02-page-319.svg

pages/Kapitel02-page-320.svg

pages/Kapitel02-page-321.svg

pages/Kapitel02-page-322.svg

pages/Kapitel02-page-323.svg

pages/Kapitel02-page-324.svg

pages/Kapitel02-page-325.svg

pages/Kapitel02-page-326.svg

pages/Kapitel02-page-327.svg

Live-Demo Vector 1

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<int> v = {2,3,6,8};
    
    // Zugriff wie beim Array
    cout << v[0] << "," << v[1] << endl;
    v[2] = 5;
    // Größe
    cout << "|v|=" << v.size() << endl;
    
    // Einfügen
    v.push_back(13);
    cout << "|v|=" << v.size() << endl;

    return 0;
}
compiler
Beispiel '02-Vector.cpp' (Ausschnitt 1)

Live-Demo Vector 2

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<int> v = {2,3,6,8}; 
    cout << v[0] << ","
         << v[1] << ","
         << v[2] << ","
         << v[3] << endl;
        
    // Vorsicht: Bereichsueberschreitung
    cout << v[10] << endl;

    // mit v.at(10) greift man auch auf das 10.
    // schmeißt ggf. Exception (Kapitel 12)
    cout << v.at(10) << endl;

    return 0;
}
compiler
Beispiel '02-Vector.cpp' (Ausschnitt 2)

pages/Kapitel02-page-328.svg

pages/Kapitel02-page-329.svg

pages/Kapitel02-page-330.svg

pages/Kapitel02-page-331.svg

pages/Kapitel02-page-332.svg

pages/Kapitel02-page-333.svg

pages/Kapitel02-page-334.svg

pages/Kapitel02-page-335.svg

pages/Kapitel02-page-336.svg

pages/Kapitel02-page-337.svg

pages/Kapitel02-page-338.svg

pages/Kapitel02-page-339.svg

pages/Kapitel02-page-340.svg

pages/Kapitel02-page-341.svg

pages/Kapitel02-page-342.svg

pages/Kapitel02-page-343.svg

pages/Kapitel02-page-344.svg

pages/Kapitel02-page-345.svg

pages/Kapitel02-page-346.svg

pages/Kapitel02-page-347.svg

pages/Kapitel02-page-348.svg

pages/Kapitel02-page-349.svg

pages/Kapitel02-page-350.svg

pages/Kapitel02-page-351.svg

pages/Kapitel02-page-352.svg

pages/Kapitel02-page-353.svg

pages/Kapitel02-page-354.svg

pages/Kapitel02-page-355.svg

pages/Kapitel02-page-356.svg

pages/Kapitel02-page-357.svg

pages/Kapitel02-page-358.svg

Live-Demo String

#include <iostream>

using namespace std;

int main() {
    string s {"Tortmund"};
    s[0] = 'D';

    string s2 = "TU";
    
    string s3 = s;
    s3 += "-Barop";
    
    cout << s << endl << s2 << endl << s3
        << endl << s.length() << endl;  

    return 0;
}
compiler
Beispiel '02-String.cpp'

pages/Kapitel02-page-359.svg

pages/Kapitel02-page-360.svg

pages/Kapitel02-page-361.svg

pages/Kapitel02-page-362.svg

pages/Kapitel02-page-363.svg

pages/Kapitel02-page-364.svg

pages/Kapitel02-page-365.svg

pages/Kapitel02-page-366.svg

pages/Kapitel02-page-367.svg

pages/Kapitel02-page-368.svg

pages/Kapitel02-page-369.svg

pages/Kapitel02-page-370.svg

pages/Kapitel02-page-371.svg

pages/Kapitel02-page-372.svg

pages/Kapitel02-page-373.svg

pages/Kapitel02-page-374.svg

pages/Kapitel02-page-375.svg

pages/Kapitel02-page-376.svg

Live-Demo Struct

#include <iostream>

using namespace std;

struct UnserDatentyp {
    char name[40];
    unsigned int matrikel;
    bool eidp;
};  

int main() {
    UnserDatentyp student = {"Hugo Hase", 44221, true};
    UnserDatentyp studenten[50000];

    unsigned int mnr = student.matrikel;
    cout << student.name << " " << mnr << endl;

    return 0;
}
compiler
Beispiel '02-String.cpp'

pages/Kapitel02-page-377.svg

pages/Kapitel02-page-378.svg

pages/Kapitel02-page-379.svg

pages/Kapitel02-page-380.svg

pages/Kapitel02-page-381.svg

pages/Kapitel02-page-382.svg

Wissensspeicher 2

Bool’sche Ausdrücke

  • oft genutzt zur Beeinflussung des Kontrollflusses
  • Dualismus aus C: != 0 → true, == 0 → false

Zusammengesetzte Datentypen

  • Arrays
    • gleicher Datentyp liegt n-mal vor
    • C++-Alternative: Vector
  • Zeichenketten
    • In C ein Array von char; immer mit Nullterminierung
    • C++-Alternative: String
  • Datenverbund (struct)
    • Komposition von mehreren Datentypen zu einem neuen Datentyp
    • Zusammenfassen von Informationen, die semantisch zusammenhängen, z. B. ein(e) Student:in
    • Zugriff auf einzelne Elemente über Punktoperator: studierende.name

pages/Kapitel02-page-383.svg

pages/Kapitel02-page-384.svg

pages/Kapitel02-page-385.svg

pages/Kapitel02-page-386.svg

pages/Kapitel02-page-387.svg

pages/Kapitel02-page-388.svg

pages/Kapitel02-page-389.svg

pages/Kapitel02-page-390.svg

pages/Kapitel02-page-391.svg

pages/Kapitel02-page-392.svg

pages/Kapitel02-page-393.svg

pages/Kapitel02-page-394.svg

pages/Kapitel02-page-395.svg

pages/Kapitel02-page-396.svg

pages/Kapitel02-page-397.svg

pages/Kapitel02-page-398.svg

Live-Demo enum

#include <iostream>

using namespace std;

enum Farbe { rot, gruen, blau, gelb };

int main() {
    Farbe f = rot;
    cout << "Farbe f = " << f << endl;

    f = static_cast<Farbe>(2); 
    cout << "Farbe f = " << f << endl;

    if (f == 2) {
        cout << "blau" << endl;
    }
    return 0;
}
compiler
Beispiel '02-Enum.cpp'