m-momr Skrevet 22. mars 2008 Del Skrevet 22. mars 2008 leser accelerated c++ nå, er helt sikkert bare jeg som er litt treg og ikke forstår. men hva konkret er forskjellen? std::cout << "hello " + name + "!" << std::endl; har prøvd og bytte ut << med + , og omvendt og mye forskjellige funker. Lenke til kommentar
Zethyr Skrevet 22. mars 2008 Del Skrevet 22. mars 2008 Hvis du velger et annet eksempel forstår du forskjellen mye lettere. int i; i = i << 1; // det samme som int i = i*2; i = i + 2; // det samme som.. vel.. i = i+2; Når det gjelder strenger så fungerer begge deler likt ut fra hva man ser på skjermen. std::cout << "hello " + name + "!"; Her limes først "hello ", innholdet i name og "!" sammen til én streng. Så printes hele strengen deretter. std::cout << "hello " << name << "!"; Her printes først "hello ", så innholdet i name, og så "!". Lenke til kommentar
m-momr Skrevet 22. mars 2008 Forfatter Del Skrevet 22. mars 2008 Hvis du velger et annet eksempel forstår du forskjellen mye lettere. int i; i = i << 1; // det samme som int i = i*2; i = i + 2; // det samme som.. vel.. i = i+2; Når det gjelder strenger så fungerer begge deler likt ut fra hva man ser på skjermen. std::cout << "hello " + name + "!"; Her limes først "hello ", innholdet i name og "!" sammen til én streng. Så printes hele strengen deretter. std::cout << "hello " << name << "!"; Her printes først "hello ", så innholdet i name, og så "!". ok, takk, har ikke kommet så langt at at jeg vet hva int i; er da men takk uansett, for stod det bedre nå Lenke til kommentar
Bassmus Skrevet 25. mars 2008 Del Skrevet 25. mars 2008 leser accelerated c++ nå, er helt sikkert bare jeg som er litt treg og ikke forstår.men hva konkret er forskjellen? std::cout << "hello " + name + "!" << std::endl; har prøvd og bytte ut << med + , og omvendt og mye forskjellige funker. Uten at jeg skal si det for sikkert, tror jeg cout-funksjonen støtter << og + likt. Men på generelt grunnlag, betyr + at to verdier legges sammen helt matematisk. Men << betyr at selve "bitene" (av engelsk: bits) tallet er gjort opp av flyttes én plass til venstre. Så hvis variabelen Tall er 5 (binært 0101), og du skriver Tall = Tall << 1;, betyr det at bitene flyttes én plass til venstre og dermed blir 10 (binært 1010). Den "nye plassen" til høyre vil da alltid være 0. Forøvrig fungerer >> på samme måte, at bitene flyttes n antall plasser mot høyre. Med andre ord vil Tall = Tall >> 2; flytte bitene 2 plasser mot høyre. Lenke til kommentar
Giddion Skrevet 25. mars 2008 Del Skrevet 25. mars 2008 leser accelerated c++ nå, er helt sikkert bare jeg som er litt treg og ikke forstår.men hva konkret er forskjellen? std::cout << "hello " + name + "!" << std::endl; har prøvd og bytte ut << med + , og omvendt og mye forskjellige funker. Uten at jeg skal si det for sikkert, tror jeg cout-funksjonen støtter << og + likt. (snip) Zethyr har rett i sin forklaring. std::cout << "hello " + name + "!" << std::endl; blir behandlet som std::cout << ("hello " + name + "!") << std::endl; std::cout er en ostream klasse som bare har operatoren << og noen funksjoner. Lenke til kommentar
Bassmus Skrevet 26. mars 2008 Del Skrevet 26. mars 2008 (endret) Zethyr har rett i sin forklaring.std::cout << "hello " + name + "!" << std::endl; blir behandlet som std::cout << ("hello " + name + "!") << std::endl; std::cout er en ostream klasse som bare har operatoren << og noen funksjoner. Du har sikkert helt rett! Jeg burde vel strengt tatt egentlig ikke uttalt meg om den cout-funksjonen, siden jeg ikke har så god greie på den. Men jeg reagerte på at det ble sagt at i = i << 1 er det samme som i = i * 2. << og >> har ikke noe med multiplikasjon som sådan å gjøre, men å flyte biter mot venstre eller høyre. Endret 26. mars 2008 av Bassmus Lenke til kommentar
Zethyr Skrevet 26. mars 2008 Del Skrevet 26. mars 2008 Men jeg reagerte på at det ble sagt at i = i << 1 er det samme som i = i * 2. << og >> har ikke noe med multiplikasjon som sådan å gjøre, men å flyte biter mot venstre eller høyre.I totalls-systemet vil det si det samme å flytte bitene 1 hakk til venstre, som å multiplisere med 2. Dersom compileren ikke optimaliserte multiplikasjonene ville det dog gå raskere å bitshifte til venstre enn å multiplisere med en toerpotens (på noen prosessorer). Lenke til kommentar
kake_fisk Skrevet 26. mars 2008 Del Skrevet 26. mars 2008 Jeg har et spørsmål... Hva betyr int? Står det for initailaize variable? Som "int variablename"? Lenke til kommentar
Zethyr Skrevet 26. mars 2008 Del Skrevet 26. mars 2008 int står for "integer" og betyr heltalls-variabel. Når jeg skriver int a = 2; så sier jeg at jeg har en heltallsvariabel som heter a, og som nå for tiden inneholder tallet 2. Men jeg skal gi deg et tips: Du bør nok lese noen sider i ei c++-bok hvis du skal lære noe særlig effektivt Lenke til kommentar
kake_fisk Skrevet 26. mars 2008 Del Skrevet 26. mars 2008 Er det noen gratis online bøker da? Fordi jeg bare leker litt med c++ av og til og har ikke tenk å gå så veldig dypt inn i det siden jeg allerede programerer et annet språk... Men hvordan kan jeg lage en variabel som inneholder en streng (string) da? Lenke til kommentar
Giddion Skrevet 26. mars 2008 Del Skrevet 26. mars 2008 Er det noen gratis online bøker da?Fordi jeg bare leker litt med c++ av og til og har ikke tenk å gå så veldig dypt inn i det siden jeg allerede programerer et annet språk... Du kan jo starte med denne. C++ Language Tutorial Men hvordan kan jeg lage en variabel som inneholder en streng (string) da? #include <string> std::string text = "hei dette er en tekststreng"; Lenke til kommentar
JeffK Skrevet 26. mars 2008 Del Skrevet 26. mars 2008 (endret) Skal prøve på en litt nøye forklaring: + og << er operatorer. Operatorer er egentlig funksjoner. F.eks. kunne + vært add(a,b). I C++ kan operatorer(som andre funksjoner) overlagres. I standardbiblioteket har mange klasser overlagret operatorer på en hensiktsmessig måte(string er en klasse og cout er et objekt av type/klasse ostream). Operatorer har en viss presedens, dvs. i hvilken rekkefølge de utføres. F.eks. utføres a + b * c slik: a + (b * c) De fleste operatorer assosierer fra venstre mot høyre, dvs a + b + c utføres slik: (a + b) + c + har høyere presedens enn <<, så: cout << "hello " + name + "!" << endl; blir slik cout << ("hello " + name + "!") << endl; -> cout << (("hello " + name) + "!") << endl; + operatoren har omtrent slik deklarasjon(muligens brukes referanser): string operator+(string a, string b); dvs. +-funksjonen tar inn to strenger og returnerer en streng(de to strengene konkatenert). funksjonen/operatoren kjøres to ganger i uttrykket (("hello " + name) + "!") man står da igjen med(total == ("hello " + name) + "!"): cout << total << endl; -> (cout << total) << endl; Klassen ostream(som cout er) har overlagret << omtrent slik: ostream &operator+(string s); dvs. funksjonen gjør noe med strengen på høyre side og returnerer en referanse. Det noe den gjør er i dette tilfellet å skrive til stdout. Referansen den returnerer er til seg selv. Poenget med det er at man slipper å skrive: cout << total; cout << endl; Håper dette var riktig:) Endret 26. mars 2008 av JeffK Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå