Anfängerprobleme!



  • Hallo Leute,

    gerade bin ich dabei mit meinem ersten C++ Tutorial herum zu experimentieren,
    und im Moment beschäftige ich mit allen möglichen Varianten von Funktionen.
    Dazu hier nun meine Fragen ich weiß es sind viele aber ich bitte Euch mir
    weiter zu helfen. VIELEN DANK !

    Frage 1:
    Kann man einer Void Funktion auch Parameter übergeben?

    Frage 2:
    Mit Funktionen die einen Wert zurückgeben komme ich schon ziemlich gut zurecht,
    aber ich verstehe den Sinn von Funkt. die keinen Wert zurükgeben nicht, wozu
    sind die denn gut? In meinem Tutorial gibt es dafür keine Beispiele.

    Frage 3:
    Muß ich in der Funkt. void main(void) unbedingt void in die Klammern
    schreiben oder kann ich das auch weglassen? Hat das weglassen
    Auswirkungen auf das Programm?

    Frage 4:
    Warum muß ich am Anfang die Funktionen mit Prototypen deklarieren, kann ich
    nicht gleich die Funktionen hinschreiben?

    Frage zu Nachkommastellen:
    In meinem Tutorial steht nichts darüber, ich bekomme beim Typ float
    6 Nachkommastellen ich will dies aber selbst bestimmen, wie muß ich das machen?

    Frage zu Compiler:
    Ich habe eine Autoren Version von Visual C++ 6.0, möchte mir aber bald eine
    professionelle Version kaufen, da ich meine Programmme ja auch weitergeben
    möchte. Welche soll ich mir den kaufen, mit der ich keinen Beschränkungen
    unterliege? Wieviel kostet mich das, und kriege ich die auch im Laden oder
    gibts die nur Online, ich sitze nämlich im Internet-Cafe selbst habe ich
    zur Zeit keinen Anschluß.

    nette Grüße,
    Tutoeialfresser 🙂



  • Zu 1:
    Ja kannst du. Wie sonst auch. Also z.B.

    void encrypt(string Text, string Key)
    

    Zu 2:
    Die Funktionen müssen nicht unbedingt einen Wert zurückgeben um zu nützen, du kannst zum Beispiel Textausgabe in die Funktionen setzen und lässt sie damit trotz des Void-Typs etwas leisten.

    Zu 3:
    Wenn du in die Klammern "Void" schreibst, heißt das letztlich nicht nur, dass du der Funktion keine Parameter übergibst?

    Zu Nachkommastellen:
    Float ist so definiert, dass du nur 7 Stellen zur Verfügung hast. Musst mal nach Double und Quad Precision suchen, damit kriegst du "genauere" Werte.



  • Lad dir Visual C++ 2005 Express Version runter. Als CD-Image ist es etwa 400 MB groß. Brauchst nix kaufen.



  • TutorialFresser schrieb:

    Frage 4:
    Warum muß ich am Anfang die Funktionen mit Prototypen deklarieren, kann ich
    nicht gleich die Funktionen hinschreiben?

    Kannst du, aber der Compiler kann anhand der Prototypen optimieren. Außerdem läuft es meistens so:
    "Prototyp" (also die Deklaration) steht in der Headerdatei und die Implementation (Definition) in der Source-Datei. Im Allgemeinen ist es eh besser, möglichst wenig C-Style Funtionen zu haben, die leer im Raum stehen.



  • zu 3.: Das erste void musst du auf alle Fälle weglassen und dafür ein int hinschreiben, da es so kein Standard-C++ ist, das zweite void in der Parameterliste ist ein Relikt aus uralten C-Zeiten, als foo() noch beliebig viele Parameter aufnahm. Lass es lieber weg.
    zu 4.: Normalerweise trennt man, aus Übersichtsgründen und um Quellcode zu verstecken, Schnittstelle und Implementierung. Später wirst du Funktionen in andere Module auslagern und in der entsprechenden .h-Datei normalerweise nur die Prototypen anbieten.



  • Vielen Dank für Eure Antworten.

    @tipp
    Wie gesagt runterladen is nicht da kein Anschluß.

    Noch eine Frage:
    Gibt es Tutorials die sich nur mit einem bestimmten Thema beschäftigen,
    zum Beispiel nur mit Funkt. oder nur mit Arrays, Zeigern, Klassen usw.?

    Grüße,
    Tutorialfresser 🙂



  • mit bestimmer Anzahl kommastellen :

    cout << fixed << set.precision(2);     //2 Stellen nach dem Komma
        .... //Hier gehts dann bei dir weiter
    


  • lol. hast du keine freunde mit dsl anschluß?



  • @tipp
    Nein leider.

    Vielen Dank für Eure Antworten!

    Grüße,
    Tutorialfresser 🙂



  • TutorialFresser schrieb:

    Frage 4:
    Warum muß ich am Anfang die Funktionen mit Prototypen deklarieren, kann ich
    nicht gleich die Funktionen hinschreiben?

    Eine Funktionsdeklaration musst du nicht schreiben. Wenn du keine brauchst, dann schreib auch keine.
    Das Problem ist einfach, dass sich Funktionsimplementationen in externen Modulen "verstecken" können. Und ohne exakte Kenntnis der Funktionssignatur kann ein Compiler keinen Aufruf durchführen. Er müsste dann raten und das willst du mit Sicherheit nicht. Nur mal als Beispiel:

    if (do_something(10))
    

    Woher soll nun der Compiler wissen, wie der Parameter übergeben werden soll? Er sieht zwar, dass der übergebene Wert ein int ist, trotzdem kann der Parameter selbst zB auch ein double sein. Dann sieht der Wert nicht nur auf Bitebene anders aus, sondern du brauchst uU auch mehr Stack zur Übergabe. Und was ist mit dem Rückgabewert? Ist das jetzt ein bool, was man sofort weiterverarbeiten könnte? Oder müsste erst eine implizite Umwandlung nach bool durchgeführt werden?

    Natürlich könnte man auch einfach in dem entsprechenden externen Modul nachschauen, welche Signatur die Funktion hat. Das würde zB für statische Bibliotheken auch funktionieren. Aber was ist mit dynamischen Bibliotheken? Dort kann man erst zur Laufzeit bestimmen, welche Bibliothek geladen werden soll und welche Funktion aufgerufen werden soll. Das Problem ist nur, der Aufruf selbst steht bereits beim Kompilieren fest. Lediglich die Funktionsadresse wird dynamisch angepasst.


Anmelden zum Antworten