1. #1
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    6.080
    Thanked 9.118 Times in 2.995 Posts
    Blog Entries
    5

    Beitrag [C++] Grundwissen II (Funktionen und Parameter)

    Da demnächst mal wieder eine Arbeit ansteht, gibt's von mir mal wieder ein bisschen Bildung im Bereich C++ für Noobs


    1. Funktionen

    Funktionen setzt man meistens ein, um Codeausschnitte, die sich mehrfach wiederholen, zusammenzufassen, damit der selbe Code nicht 10x in einem Programm vorkommt => Wartungsaufwand und Fehleranfälligkeit wird verringert. Bei komplexeren Projekten nutzt man Funktionen im Zusammenhang in Klassen, um einzelne Komponenten besser zu gliedern und so das Projekt übersichtlich zu halten.


    1.1 Allgemein

    Eine Funktion ist wie folgt aufgebaut:

    Code:
    void TuWas()
    {
        // Code
    }
    Zum Anfang steht der Datentyp, den der Rückgabewert der Funktion hat. (Zu Variablen und Datentypen siehe Teil I (Punkt 2))
    Hier kann also Beispielsweise auch int oder float stehen.
    void ist ein Sonderfall: void liefert einen leeren Rückgabewert, was keinem Rückgabewert entspricht.

    Darauffolgend kommt der Name, dieser wird mit () beendet.
    Zwischen den zwei geschweiften Klammern steht der Code, der die Funktion beinhaltet.

    Ist der Datentyp nicht vom Typ void, liefert die Funktion einen Rückgabewert, d.H. ein Wert dieses Typs muss irgendwo in der Funktion mit return zurückgegeben werden:

    PHP-Code:
    int Rechne()
    {
        
    int Summe 2;
        return 
    Summe;

    Die Funtion Rechne ist vom Typ int, sie liefert also einen Integer zurück.
    Wird die Funktion aufgerufen, rechnet sie 2+2 zusammen und liefert das Ergebnis zurück.

    Verwendet wird die Funktion so:

    PHP-Code:
    #include <iostream>
    #include <conio>
    using namespace std;

    int Rechne()
    {
        
    int Summe 2;
        return 
    Summe;
    }

    void main()
    {
        
    int Ergebnis Rechne();
        
    cout << "Das Ergebnis lautet: " << Ergebnis;
        
    getch();

    Der Rückgabewert der Funktion Rechne wird in die Variable Ergebnis geschrieben und ausgegeben.

    Funktionen vom Rückgabetyp void müssen natürlich auch so behandelt werden und dürfen natürlich nirgends wie eine Variable behandelt werden!

    Das folgende Beispiel geht also gnadenlos schief:

    PHP-Code:
    #include <iostream>
    #include <conio>
    using namespace std;

    void TuWas()
    {
        
    // Code der Funktion
    }

    void main()
    {
        
    cout << TuWas();
        
    getch();

    Dasselbe gilt natürlich wenn versucht wird, den nicht vorhandenen Rückgabewert in eine Variable zu schreiben:

    PHP-Code:
    int i TuWas(); 
    Die Zurückgabe eines Wertes aus einer Funktion vom Typ void ist logischerweise ebenfalls nicht möglich, hier muss man der Funktion den entsprechenden Typ zuweisen, den man zurückgeben möchte (int, float, etc).

    Meiner Meinung nach ist das auch komplett sinnlos. Wenn man eine Funktion vom Typ void hat weiß man, dass sie keinen Rückgabewert liefert, und wo nichts ist kann auch nichts ausgegeben oder gespeichert werden.
    Wollte ich nur mal gesagt haben, da den Fehler viele gemacht haben, wieso auch immer.

    1.2 Parameter

    Die Funktion Rechne aus dem obigen Beispiel macht effektiv natürlich wenig Sinn, man könnte in die Variable Ergebnis auch einfach die Summe aus 2+2 schreiben und hätte sich Arbeit gespart.
    Dieses Beispiel soll auch nur das Funktionsprinzip zeigen. Sinnvoll wird das obige Beispiel erst, wenn Parameter mit ins Spiel kommen.

    Parameter sind Variablen eines bestimmten Typs, die man einer Funktion beim aufruf übergeben kann. Die Parameter schreibt man in die () nach dem Funktionsnamen. Deklariert werden sie ähnlich wie normale Variablen:

    PHP-Code:
    int Rechne(int xint y)
    {
        
    int Summe y;
        return 
    Summe;

    Dieser Funktion werden beim Aufruf 2 Variablen vom Typ Integer übergeben. Die Funktion kann mit den Variablen machen was sie will.
    In dem Fall soll sie beide Zahlen addieren und das Ergebnis zurückliefern.

    Das obige Beispielprogramm sieht so verändert wie folgt aus:

    PHP-Code:
    #include <iostream>
    #include <conio>
    using namespace std;

    int Rechne(int xint y)
    {
        
    int Summe y;
        return 
    Summe;
    }

    void main()
    {
        
    int Ergebnis Rechne(24);
        
    cout << "Das Ergebnis lautet: " << Ergebnis;
        
    getch();

    Die entscheidende Funktion ist hierbei

    PHP-Code:
    int Ergebnis Rechne(24); 
    2 ist in der Funktion Rechne der Integer x, 4 entspricht y.
    Die Funktion addiert also 2+4, sendet uns das Ergebnis zurück, und wir speichern es in der Variable Ergebnis.

    Man muss beim Zurückgeben von Werten mittels return natürlich nicht zwingend eine Zwischenvariable angeben wie im Beispiel oben, man kann genau so gut auf die Zwischenvariable verzichten:

    PHP-Code:
    int Rechne(int xint y)
    {
        return 
    y;

    Würde ich in dem Fall auch so machen.
    Wollte ich nur mal erwähnt haben, da Programmierer meistens sehr faul sind und daher keine unnötigen Zwischenvariablen anlegen wenn man sich die Arbeit auch sparen kann
    Sollte natürlich nur eingesetzt werden wenn es sinnvoll ist. Gibt die Funktion das Ergebnis einer 10m langen Rechnung zurück die 20 Variablen beinhaltet wären ein paar Zwischenvariablen wohl doch nicht so schlecht, damit nicht 1000 Fehler entstehen und in 2 Wochen noch überhaupt jemand kapiert, was die Funktion eigentlich tut.


  2. The Following 2 Users Say Thank You to DMW007 For This Useful Post:

    Dexxmor (04.10.2014), Essah (21.03.2012)

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 05.01.2017, 09:31
  2. Emulator Funktionen ?
    Von Bossover im Forum Support
    Antworten: 1
    Letzter Beitrag: 18.04.2012, 17:05
  3. Knuddels Funktionen
    Von helfen im Forum Knuddels Allgemein
    Antworten: 3
    Letzter Beitrag: 10.04.2012, 13:16
  4. Antworten: 0
    Letzter Beitrag: 20.03.2012, 17:05
  5. Antworten: 1
    Letzter Beitrag: 20.02.2012, 18:50

Stichworte

Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.