Fraction fractionMultiplication( Fraction frac1, Fraction frac2 ) { Fraction result; result.numerator = frac1.numerator * frac2.numerator; result.denominator = frac1.denominator * frac2.denominator; return result; }

Nutzen lässt sich die Funktion ungefähr so:

#include <cstdio> Fraction fractionMultiplication( Fraction frac1, Fraction frac2 ) { Fraction result; result.numerator = frac1.numerator * frac2.numerator; result.denominator = frac1.denominator * frac2.denominator; return result; } int main() { Fraction frac1, frac2, result; frac1.numerator = 1; frac1.denominator = 2; frac2.numerator = 3; frac2.denominator = 4; result = fractionMultiplication( frac1, frac2 ); printf( "%i / %i\n", result.numerator, result.denominator ); return 0; }

Die Ausgabe ist dann auch entsprechend 3 / 8.

Der neue C++-Standard erlaubt übrigens noch eine weitere Art der Zuweisung von Werten1. Statt den einzelnen Bestandteilen einer Struktur Werte explizit zuzuweisen, können alle Werte mit einem mal in der Reihenfolge ihrer Deklaration zugewiesen werden. Die Werte werden dazu in geschweifte Klammern geschrieben – der Compiler interpretiert diese Darstellung dann automatisch in der korrekten Art und Weise (soweit möglich). Obiges Beispiel lässt sich damit folgendermaßen beträchtlich kürzer schreiben:

1Teile dieser Darstellung funktionierten bereits in älteren C++-Versionen, jedoch nicht alle.

#include <cstdio> Fraction fractionMultiplication( Fraction frac1, Fraction frac2 ) { return { frac1.numerator * frac2.numerator, frac1.denominator * frac2.denominator }; } int main() { result = fractionMultiplication( { 1, 2 }, { 3, 4 } ); printf( "%i / %i\n", result.numerator, result.denominator ); return 0; }

Man sieht – viele Variablendeklarationen lassen sich damit komplett umgehen; ob diese Kurzschreibweise jetzt immer der Lesbarkeit dient, sei aber einmal dahingestellt. Übrigens kann man auch Variablen deklarieren und ihnen mit dieser Schreibweise Werte zuweisen, um einen Kompromiss aus Kürze und Ausdrucksstärke zu haben, etwa so (frac1 und frac2 werden hier unterschiedlich deklariert und initialisiert, um noch einmal die verschiedenen Möglichkeiten ins Gedächtnis zu rufen):

#include <cstdio> Fraction fractionMultiplication( Fraction frac1, Fraction frac2 ) { Fraction result; result = { frac1.numerator * frac2.numerator, frac1.denominator * frac2.denominator }; return result; } int main() { Fraction frac1; frac1 = { 1, 2 }; Fraction frac2 = { 3, 4 }; Fraction result = fractionMultiplication( frac1, frac2 ); printf( "%i / %i\n", result.numerator, result.denominator ); return 0; }

Soweit zur Einführung in die strukturierten Datentypen. In den nächsten Artikeln werden wir uns anschauen, wie derartige Datentypen intern im Speicher behandelt werden und wie sie im Zusammenhang mit Pointern zur Darstellung noch komplexerer Informationen genutzt werden können.

1 / 2

Kommentare (7)

  1. #1 rolak
    Oktober 17, 2013

    JuchHu, es geht weiter!

  2. #2 Marcus Frenkel
    Oktober 17, 2013

    Ja, endlich. Jetzt hoffentlich regelmäßiger. 😉

  3. #3 rolak
    Oktober 17, 2013

    Das wäre erfreulich – und wenn ich richtig fremdschließe, nicht nur für mich. War ja heute nicht gerade eine Erleuchtung für nen alten Dinosaurier-Dompteur, doch wer weiß was alles noch kommt…

  4. #4 MartinB
    Oktober 18, 2013

    @rolak
    Auch seinerzeit mit JCL gearbeitet (die höllischste Sprache aller Zeiten – selbst die Rechenzentrumsexperten am Desy hatten Probleme, wenn man da was komplizierteres tun wollte…)?

  5. #5 rolak
    Oktober 19, 2013

    Auch .. JCL?

    So wenig wie möglich, MartinB – zu der Physik-Zeit (OS360) war ich hauptsächlich user, Problemlösungs-Programm-Schreiber, Datenträger mit Schuhkarton voll Lochkarten unterm Arm. Später bei der Informatik wurde das siemensianische BS2000-Eisen schon ausgeschlichen gegen eine Horde MicroVaxen, Terminals zu Workstations, doch an der FAU/ER gab es als Mami für die vielen Unix-Terminals auch noch so ein Möbel mit grotesk vielen Spezialprozessoren, ein Abenteuer-Spielplatz für asm-Gefrickel…

    Damals, Mitte 80er, waren die AppleII-er und wir XT-ler noch die Freaks per se 😉

  6. #6 Dr. Webbaer
    Oktober 19, 2013

    Wann genau wird eigentlich aus einem strukturierten Datentyp ein Datensatz?

    MFG
    Dr. W (der Job- oder Stapelverarbeitungssprachen ebenfalls schätzt)

  7. #7 michael
    November 1, 2013

    @WB
    > Wann …

    Guck er hier und arbeite sich bis zur sechsten Zeile vor.