brauche hilfe bei c++

  • hi leute...
    ich weiß das das hier das falsche forum für cc++ ist, aber ich hoffe mal das sich einige damit auskennen :)

    folgendes:
    ich möchte c++ lerne und komme allerdings nicht ganz klar....z.b. habe ich totale verständnisprobleme beim vererben und wie das so mit der schreibweiße in c++ generell ist :(
    naja...auf jedenfall habe ich mir gedacht das es für mich leichter wäre c++ zu verstehen wenn man 2 scripte mit dem selben inhalt (einmal in c++ und einmal in autoit) hat :)
    so könnte man die einzelnen schritte besser verstehen, da ich es dann ja mit dem autoitcode "abgleichen" und so hoffentlich c++ besser verstehen kann :)

    im moment versuch ich in c++ die scripte nach zu bauen die ich bereits in autoit geschrieben habe...und da wollte ich fragen ob mir jemand dabei helfen kann z.b. folgendes script in c++ zu übersetzen ;) damit meine ich jetzt natürlich nicht komplett ( was natürlich auch nicht schlecht wäre :D), sonder mit lediglich denkanstöße gibt, indem er mir die nötigen befehle in c++ verrät :)

    Spoiler anzeigen
    [autoit]

    Func _CreateDriveInkOnDesktop()
    Local $a_drive = DriveGetDrive("ALL")
    Local $a_driveondesktop = _GetDriveInkOnDesktop()
    Local $f_notfound = True, $s_drivelabel = "", $f_delete = True, $f_nichtidentisch = True

    [/autoit] [autoit][/autoit] [autoit]

    If $a_drive[0] > $a_driveondesktop[0] Then
    For $i = 1 To $a_drive[0]
    $a_drive[$i] = StringUpper(StringLeft($a_drive[$i], 1)) & ":"
    $f_notfound = True
    For $x = 1 To $a_driveondesktop[0]
    If StringLeft($a_drive[$i], 1) = StringMid($a_driveondesktop[$x], 2, 1) Then $f_notfound = False
    Next
    If $f_notfound Then
    $s_drivelabel = DriveGetLabel($a_drive[$i])
    If @error Then $s_drivelabel = "UNKNOWN"
    FileCreateShortcut($a_drive[$i] & "\", @DesktopDir & "\(" & StringLeft($a_drive[$i], 1) & ") - " & $s_drivelabel)
    EndIf
    Next
    ElseIf $a_drive[0] < $a_driveondesktop[0] Then
    For $i = 1 To $a_driveondesktop[0]
    $f_delete = True
    For $x = 1 To $a_drive[0]
    If StringMid($a_driveondesktop[$i], 2, 1) = StringLeft($a_drive[$x], 1) Then $f_delete = False
    Next
    If $f_delete Then FileDelete(@DesktopDir & "\" & $a_driveondesktop[$i])
    Next
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetDriveInkOnDesktop()
    Local $h_search = FileFindFirstFile(@DesktopDir & "\*")
    Local $s_inkfiles = "", $a_array[1] = [0]

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $s_file = FileFindNextFile($h_search)
    If @error Then ExitLoop
    If StringLeft($s_file, 1) = "(" And StringRegExp(StringMid($s_file, 2, 1), "[a-zA-Z]") And StringMid($s_file, 3, 1) = ")" Then $s_inkfiles &= $s_file & "|"
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    FileClose($h_search)

    [/autoit] [autoit][/autoit] [autoit]

    If $s_inkfiles = "" Then
    Return $a_array
    Else
    Return StringSplit(StringTrimRight($s_inkfiles, 1), "|")
    EndIf
    EndFunc

    [/autoit]
  • Am besten ist es, wenn du dafür aus der boost-library boost.filesystem verwendest. Das ist plattformunabhängig und recht einfach und wenn der Compiler noch kein C++11 unterstützt, hast du mit boost.regex den RegExp-Parser gleich dabei.

    Allerdings macht es überhaupt keinen Sinn, das Skript zu konvertieren, denn WinAPI und Festplatte sind der Flaschenhals, und AutoIt wurde genau für Skripte wie dieses entworfen, C++ ist für andere Probleme.


    Eine gute Aufgabe, die ich damals gemacht habe:
    Programmiere einen Getränkeautomaten mit folgenden Funktionen:
    - Preis pro Flasche auslesen
    - Eine bestimmte Geldmenge einwerfen
    - Knopf für Geld zurückgeben (auch Wechselgeld)
    - Knopf zum Kaufen einer Flasche; dabei Rückmeldung ob erfolgreich oder nicht
    - Auslesen, ob noch Flaschen im Automaten sind (aber nicht die Menge)

    Es kann beliebig viele Automaten geben, bei denen der Preis und die Anzahl an Flaschen nicht voneinander abhängt. Kleiner Hinweis dazu: Verwende Klassen.
    Das ganze sollte ohne Libraries gelöst werden. Aus Testgründen kann natürlich eine zur Ein- und Ausgabe verwendet werden.