tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
371
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    F0rris F0rris ist offline Mitglied Silber
    Registriert seit
    Jan 2005
    Beiträge
    68
    Hallo zusammen,

    ich wühle mich grade durch ein C++ tutorial, mein Problem ist das ich davor einige Jahre mit PHP gearbeitet habe. Wenn ich nun eine Funktion erstellen will, dann würde ich es in PHP So machen:
    PHP-Code:
    function foo($blub$showIt FALSE)
    {
          
    $blub += 2;

          if(
    $showIt === TRUE)
          {
                echo 
    $blub;
          }

          return 
    $blub;
    }

    // Keine ausgabe, return 12
    foo(int 12); 
    wärend ich in C++ die Funktion erst Deklarieren muss um sie dann noch zu Definieren.

    Code c:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    #include <iostream>
     
    using namespace std;
     
     
    int test(int blub, bool showIt = false);
     
    int main()
    {
         test(12);
     
         return 0;
    }
     
    int test(int blub, bool showIt = false)
    {
          blub += 2;
     
          if(showIt === TRUE)
          {
                 cout << blub << endl;
          }
     
          return blub;
    }

    Kann mir vielleicht einer erklären, wieso das so bzw. dafür eine Faustregel geben? Ich würde lügen, wenn ich sage das es mir nicht verwirrt. Oder anders ich will das im moment nicht verstehen, wieso das so umständlich ist.

    Mein nächstes Problem ist auch, dass ich in C++ ein array mit einer festen größe erstellen muss. Da war PHP schon sehr zuvor kommend . Wie mach ich das am Besten, wenn ich eine Mehrdimensionale Array habe, in der ich int, bool und char speichern will?

    Beste Grüße F0rris
     
    Ein Nutzer braucht das Root-Passwort so dringend wie Nitroglyzerin durchgeschüttelt werden muss.

  2. #2
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Hi

    die Extra-Definition ist nur nötig, wenn die eigentliche Funktion
    nach einer Stelle kommt, wo sie verwendet wird.

    Du rufst test ja im main auf.
    C-Compiler arbeiten die Quelltexte ziemlich stur von oben nach unten ab.
    Wenn jetzt die Zeile vor dem main nicht wäre, wäre das test(12); das erste test,
    auf das der Compiler kommt. Und dann heißts "Was test, kenn ich nicht".

    Man könnte das Ganze auch so machen:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    #include <iostream>
     
    using namespace std;
     
    int test(int blub, bool showIt = false)
    {
          blub += 2;
     
          if(showIt === TRUE)
          {
                 cout << blub << endl;
          }
     
          return blub;
    }
     
    int main()
    {
         test(12);
     
         return 0;
    }
    Die komplette Funktion vor ihre Aufrufstelle.

    Aber a) will man dem Programmierer etwas Freiheit bei der Anordnung lassen
    b) gibts Situationen, wo sich zwei Funktionen gegenseitig brauchen.
    Was schreibt man dann als Erstes?
    Deshalb kann man Funktionen so im Voraus "ankündigen".

    Nochwas zum ===TRUE:
    Ein dreifaches === gibts in C/C++ nicht.
    In PHP überprüft man damit ja außer dem Wert noch die Typgleichheit.
    In C/C++ gibts aber nicht so seltsam universelle Variablen, die jeden Wert haben können.
    Der Typ einer Variable (int, float, double, short, char, string...)
    muss im Voraus festgelegt sein.
    Und da der Typ dann sowieso bekannt ist, braucht es nur den Wertevergleich ==

    TRUE und true ist übrigens ein Unterschied.
    Zu einem false sollte auch ein true.

    Rest kommt gleich...
    edit:
    Arrays mit fester Größe...ja.

    Arrays generell Mal:

    Was man als "Array" zu verstehen hat, da tanzt PHP etwas aus der Reihe.
    Die meisten Programmiersprachen kennen eine durchnummerierte Datensammlung als Array.
    Ein a['hallo'] = 'bye'; gibts weder in C/C++, noch C#, Java...ziemlich nirgends.
    Es ist schon überall möglich, aber es ist kein normales Array.

    Zweiter großer Unterschied: Mit a[] = ... einfach mal ein Element dazuhängen geht auch nicht. Ein Array hat von Haus aus eine fixe Größe. Man kann sich schon jederzeit ein beliebig größeres Array besorgen und die alten Werte ins neue Kopieren, um wieder ein paar Freiplätze zu haben, aber das ist eben etwas umständlicher. Kein []= wie in PHP.

    Punkt Drei: So wie Einzelvariablen haben auch Arrays fixe Typen.
    Ein Array, in dem man beliebig Strings und doubles (Kommazahlen) mischen kann,
    gibts ohne Zusatzarbeit nicht.

    Bei deinen genannten Typen int/char/bool gibts aber eine eigentlich ziemlich einfache Lösung.

    Kommt gleich...
    edit:

    Die Lösung: Mach ein int-Array. Fertig.
    Warum?

    Wenn ein int rein soll: Dass das keine Probleme macht, sollte klar sein.

    char: Ist prinzipiell dazu gedacht, einen Buchstaben zu speichern.
    Aber: Jeder Buchstabe hat eine Zahl zugeordnet, an der er erkannt wird
    (Asciicode, Tabelle im Internet sichtbar).

    Der Asciicode hat 256 Buchstaben+Sonderzeichen
    (warum? Damit man mit 256=2^8 genau 8Bit, also ein Byte ausnutzt).

    char ist also nichts weiter als eine 1-Byte-Zahl.Kann von 0 bis 255 zählen
    (mit dem Nuller sinds 256), oder von -128 bis +127, insgesamt 256.

    Ein int dagegen ist eine Zahl mit 4 Byte, 32 Bit, 2^32...
    kann damit ungefähr bis 4 Milliarden zählen.
    Da passt eine Zahl, die maximal 255 ist, doch locker rein...
    ein char kann man also auch einfach in ein int speichern.

    Und bool:
    true/false kann man auch auf Zahlen übertragen: 1 und 0.
    Und das passt auch in ein int, das auch 4294967295 speichern kann
    (ist genau der Maximalwert, der in 4 Byte reinpasst).

    bool kann man also auch in ein int stopfen.

    Für Bedingungen geht das übrigens auch:
    So wie man
    Code cpp:
    1
    2
    3
    4
    
    bool b = true;
    ...
    if(b)
    ...
    schreiben kann, geht auch
    Code cpp:
    1
    2
    3
    4
    
    int i = 1;
    ...
    if(i)
    ...
    Man darf natürlich i==1 schreiben, so gehts aber auch.
    0 gilt als false, alles andere als true.

    Gruß
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  3. #3
    üäpöol üäpöol ist offline Mitglied Gold
    Registriert seit
    Feb 2011
    Beiträge
    189
    Wow, das ist mal nette Zusammenfassung für jmd., der von PHP auf C/C++ umsteigt.
     

  4. #4
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.516
    Du musst auch nicht wirklich ein festes Array erzeugen, nur wird das in C(++) anders gemacht. In C (ich lass das ++ mal weg, denn was du gezeigt hast, ist zum größten Teil simples C) geschieht das über Pointer. C++ bietet da etwas anderes an: Vektoren.


    Pointer:

    Ein Zeiger ist erst mal nichts anderes als eine Variable, die eine Adresse im Speicher enthält und ist bei den meisten Compilern und Systemen mit denen du so Kontakt hast, 32bit (4Byte) groß. Der Platz im Speicher, wo der Pointer hinzeigt (also die Adresse) ist der Platz, an dem die Daten abgelegt werden. Bei Pointern musst du dich um die Speicherverwaltung kümmern, sprich selbst Speicher anfordern, befüllen, verwenden und freigeben. Damit kann das gleiche erledigen, wie mit dynamischen Arrays, also jederzeit neuen zusätzlichen Speicher anfordern und damit das "Array" erweitern.


    Vektoren:

    Dabei handelt es sich um richtige Objekte aus der C++-Welt. Sie sind typisiert, und können damit nur Werte eines bestimmten Typs enthalten. Mit Hilfe von Objekt-Methoden kannst du Elemente hinten anfügen oder weglöschen. Es gibt noch eine einfachere Klasse, die so ähnlich arbeitet: Stack.

    Assoziative Felder in C++:

    Das was du in PHP als $array['name'] = "Lieschen Müller" notierst, gibt es auch in C++, dort heißt das aber Map. Eigentlich ist die Map noch das, was dem Array in PHP am nächsten kommt. Sie unterstützt Iterationen, Einfügen von Daten an beliebigen Positionen, löschen von beliebigen Elementen, etc. Jedoch ist eine Map genau wie der Rest der Container-Klassen in C++ typisiert.


    Beispiel für eine Map in C++:

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    #include <string>
    #include <map>
    #include <iostream>
     
    int main(int argc, char **argv)
    {
        std::map<std::string, std::string> assocContainer;
        std::map<std::string, std::string>::iterator it;
     
        assocContainer.insert( std::pair<std::string,std::string>("field_a", "Hans Meier") );
        assocContainer.insert( std::pair<std::string,std::string>("field_b", "Lieschen Mueller") );
     
     
        for(it = assocContainer.begin(); it != assocContainer.end(); it++)
        {
            std::cout << (*it).first << " => " << (*it).second << std::endl;
        }
    }

    Ich hoffe, das verwirrt dich nicht all zu sehr
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

Ähnliche Themen

  1. Verständnis Problem
    Von dg87 im Forum PHP
    Antworten: 15
    Letzter Beitrag: 10.07.11, 18:13
  2. C++ Verständnis Problem!!
    Von Foxgame im Forum C/C++
    Antworten: 6
    Letzter Beitrag: 20.11.07, 22:45
  3. verständnis PROBLEM
    Von Tageslicht im Forum PHP
    Antworten: 4
    Letzter Beitrag: 11.12.04, 10:43
  4. functions problem
    Von DarkSummer im Forum PHP
    Antworten: 5
    Letzter Beitrag: 19.04.02, 18:23
  5. Problem mit functions und Dateiende
    Von tilman im Forum PHP
    Antworten: 1
    Letzter Beitrag: 14.10.01, 01:03