Gå til innhold

Boken Microsoft C/C++ OOP


Anbefalte innlegg

Har nettop fått låne meg Object oriented programming in Microsoft c++ av Robert Lafore. Er det noen som har lest den? Er den noe god?

Lurer på 1 ting. Er det noe forskjell i Microsoft c++ og c++? Kan jeg bruke boka visst jeg skal lære meg standard c++? Kan jeg bruke Dev++ for og gjøre eksemplene i boka?

 

og helt på tampen så lurer jeg på om det er noen store fordeler med å kunne c++, og om det egentlig er verdt og lære det. For det tar jo lang tid å lære, mye og sette seg inn i. Blir vel fort "rustent" og rekner jeg med(?)

Jeg er litt rar sånn, alt jeg driver med må nesten ha en mening :roll:

Ikke missforstå, jeg synes å lære c++ er kjempegøy : :yes:

Lenke til kommentar
Videoannonse
Annonse

C++ skal i teorien være C++ uansett hvilke kompiler du bruker, men Microsoft C++ har noen egne funksjoner og typer som ikke er Standard (som du altså ikke må bruke, eller sette i en #ifdef hvis det skal la seg kompilere i andre compilere)

dette er stort sett funksjoner markert med __ foran, f.eks.

__asm (bruker MASM aktig syntaks, bruker denne funksjonen hele tiden)

__interface (Blir forsåvidt kun brukt i MIDL/COM og .NET)

__super (hvorfor super ikke er standard må gudene vite)

__gc (Managed objekter for .NET)

__property (.NET igjen)

__int8/16/32/64

osv. finnes dusinvis

 

edit:

 

Glemte å nevne at alle funksjoner som er i biblioteker uten .h er standard, som skal la seg kompilere i alle compilere (som er oppdatert)

 

Og svar på siste spørsmål:

En kan være programmerer uten å kunne C++ (det finnes tusenvis som ikke kan det, helt utrolig hva denne bransjen har blitt til)

Men C++ setter deg veldig nærme hvordan datamaskinen fungerer (ihvertfall hvis du bruker mye vanlig C) som er utrolig nyttig å vite,

 

Pekere til funksjoner, stack/heap allokering... beste som finnes.

Endret av GeirGrusom
Lenke til kommentar
det finnes tusenvis som ikke kan det, helt utrolig hva denne bransjen har blitt til)

 

det er ganske utrolig, spør du meg, at du, i herrens år 2005, sitter og lager timerfunksjonene dine og gud vet hva annet i inline asm.

 

Pekere til funksjoner, stack/heap allokering... beste som finnes.

ja gud. det er bedre enn sex!

jeg simpelten elsker å sitte og new'e og delete'e for det er DET som gjør meg til en programmerer. samtidig som jeg bruker inline asm så mye som mulig selvsagt.

Endret av waboi
Lenke til kommentar

Er det noen som har jobb som programmerer her?

Har hørt at når man går videre til å bli IT-ingeniør ( sånn det skrives? ) så kan man velge forskjellige veier og gå, bla. annet programmering..Stemmer dette?

Er det vansklig å få seg jobb i den bransjen? En av grunnene til at jeg har lyst og lære meg c++ er fordi jeg har litt lyst og arbeide med programmering senere i livet også, derfor jeg spør om slike "merkelige" spørsmål :p ( men lever i den teorien om at d er ingenting som heter dumme spørsmål bare dumme svar :whistle: )

 

Visual c++ er det slik som visual basic? Sånn at man kan putte inn knapper og slikt å adde koder til dem, bare at det er c++ koder?

Lenke til kommentar

Hvis du går på høgskole får du tittelen høgskoleingeniør etter 3 år, og er sannsynligvis den utdanningen du bør ta hvis du ønsker å bli programmerer.

 

Det er sikkert forskjellig fra skole til skole, men skolen jeg gikk på hadde to linjer: softwareutvikling og hardwareutvikling. Første året er felles for begge linjene, mens noen av fagene 2. og 3. året er spesialisert for de to linjene. Du trenger ikke velge linje før du er ferdig med første året.

 

Er ikke helt oppdatert på jobbmarkedet, men jeg tror det har blitt en del bedre den siste tiden etter det har vært ganske tungt i 2-3 år. For 4-5 år siden var det derimot veldig lett å få seg jobb. Hvordan det er om 5 år er det vel ingen som vet...

Endret av kjetil7
Lenke til kommentar

Hmm, har komt et lite stykke ut i boka, helt til et eksempel om unsigned og signa variabler. Jeg lastet ikke ned den compileren som blir brukt i boka for jeg har brukt dev++ littegrann fra før av. Men lurer nå på hvorfor dette ikke går i Dev++

 


#include <iostream.h>

void main() {
  int signedVar = 25000;
  unsigned int unsignedVar = 25000;

  signedVar = (signedVar * 2) /3;  // her skal d bli out of range
  unsignedVar = (unsignedVar *2) /3; //her skal det funke fint

  cout << "signedVar = " << signedVar << endl; // her skal det vise -5178
  cout << "unsignedVar = " << unsignedVar << endl; // her skal det vise 16666

system("pause");
}

 

Dette er det eksempelet som er i boka, bortsett fra at system("pause") ikke er der.

Feilbeskjeden jeg får er: "Main must return int". Lurer på om det kanskje kan ha med compileren og gjøre? i og med at jeg ikke bruker den samme som i boka? Om det skulle ha noe og si. Jeg prøvde og skifte void med int, det funka. Eneste problemet da at den verdien jeg fikk på signedVar som skulle være -5178 ble den samme verdien som på unsignedVar. Hva er det egentlig som ikke er som det skal? :hmm:

 

edit: retta en skriveleif

edit2: Kan det ha noe med at visst en integer blir for stor til å være int, at den blir automatisk gjort om til long int?

Endret av Gromguten
Lenke til kommentar
det er ganske utrolig, spør du meg, at du, i herrens år 2005, sitter og lager timerfunksjonene dine og gud vet hva annet i inline asm.

Og får meg, idenne herrens år 2005, er det helt utrolig at du, sitter her og ikke er interresert i å finne ut hvordan ting gjøres.

 

Jeg (som forhåpentligvis) de fleste andre er ikke interresert i å bruke alt alle andre har laget for meg. Selvlagd er vellagd, dessuten lærer jeg veldig mye av å bruke assembly.

 

"Se på meg! jeg liker å skrive #include <string> men helst vil jeg bare skrive php eller Java"

 

:) tok deg på kornet der waboi?

Lenke til kommentar

nei det gjorde du ikke.

en ting er å kunne assembly, det er en helt annen ting å bruke det.

hvis du gjør det for å lære er det greit, men hvis du gjør det fordi det går fortere eller fordi du ikke vil bruke andre sine ting er det bare teit. og når det gjelder selvlagde ting vs biblioteker så er det nok ikke sant at selvlagd = vellagd. de fleste biblioteker er blitt testet og optimalisert rimelig mye mer enn noe av din kode vil jeg tippe. litt morro at du nettopp sa "maskinkode er helvete" i generell/annen programmering da. assembly er såååå mye bedre liksom.

Lenke til kommentar
Hmm, har komt et lite stykke ut i boka, helt til et eksempel om unsigned og signa variabler. Jeg lastet ikke ned den compileren som blir brukt i boka for jeg har brukt dev++ littegrann fra før av. Men lurer nå på hvorfor dette ikke går i Dev++

...

 

int main(int argc, char** argv)
{
...

return 0;
}

 

argc = antall argumenter fra commandolinjen når programmet kalles.

argv = liste med strings av hvert argument.

 

* unsigned int er normalt 32-bit(2^32)... så 0 til 4294967295

signed int er -2147483648 til 2147483647, eller noe sånn.

 

* Hvis du har en header fil i tillegg, så må

int main(int argc, char** argv);

være definert der.

 

Redit: fixa.

Endret av hishadow
Lenke til kommentar

(off topic)

*sigh*

 

ja, hvis jeg skriver et inline assembly del, som skal vi si, regner ut hvor lang tid det er siden den koden ble kjørt sist (timer)

så lærer jeg jo ndel av det.

 

Assembly er en del lettere en maskinkode ja

La oss f.eks. se på Jmp funksjonen:

(Intel Instruction Set Referance)

Opcode Instruction Description

EB cb JMP rel8 Jump short, relative, displacement relative to next instruction

E9 cw JMP rel16 Jump near, relative, displacement relative to next instruction

E9 cd JMP rel32 Jump near, relative, displacement relative to next instruction

FF /4 JMP r/m16 Jump near, absolute indirect, address given in r/m16

FF /4 JMP r/m32 Jump near, absolute indirect, address given in r/m32

EA cd JMP ptr16:16 Jump far, absolute, address given in operand

EA cp JMP ptr16:32 Jump far, absolute, address given in operand

FF /5 JMP m16:16 Jump far, absolute indirect, address given in m16:16

FF /5 JMP m16:32 Jump far, absolute indirect, address given in m16:32

 

Du må være enig i at JMP er lettere å skrive og forstå?

 

eller MOV

(Intel Instruction Set Referance)

Opcode Instruction Description

88 /r MOV r/m8,r8 Move r8 to r/m8

89 /r MOV r/m16,r16 Move r16 to r/m16

89 /r MOV r/m32,r32 Move r32 to r/m32

8A /r MOV r8,r/m8 Move r/m8 to r8

8B /r MOV r16,r/m16 Move r/m16 to r16

8B /r MOV r32,r/m32 Move r/m32 to r32

8C /r MOV r/m16,Sreg** Move segment register to r/m16

8E /r MOV Sreg,r/m16** Move r/m16 to segment register

A0 MOV AL,moffs8* Move byte at (seg:offset) to AL

A1 MOV AX,moffs16* Move word at (seg:offset) to AX

A1 MOV EAX,moffs32* Move doubleword at (seg:offset) to EAX

A2 MOV moffs8*,AL Move AL to (seg:offset)

A3 MOV moffs16*,AX Move AX to (seg:offset)

A3 MOV moffs32*,EAX Move EAX to (seg:offset)

B0+ rb MOV r8,imm8 Move imm8 to r8

B8+ rw MOV r16,imm16 Move imm16 to r16

B8+ rd MOV r32,imm32 Move imm32 to r32

C6 /0 MOV r/m8,imm8 Move imm8 to r/m8

C7 /0 MOV r/m16,imm16 Move imm16 to r/m16

C7 /0 MOV r/m32,imm32 Move imm32 to r/m32

 

Det er maskinkode, det finnes hundre forskjellioge funksjoner for å gjøre tilnærmet samme ting, pluss at noen instruksjoner tar en, andre tar to, og andre der igjen tar tre byte.

Kikk litt på general instruction format, det er ikke akkurat en dans på roser

"Instruction prefixes, up to four prefixes of one byte eax (optional)"

optional prefix, glimrende.

(/off topic)

 

Uansett, signed betyr at det siste bitet blir brukt til å bestemme om tallet er negativt eller positivt, unsigned betyr at det siste bitet blir brukt som vanlig.

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...