Funktion der RETUNERE en linje

Tags:    c++

Når man bruger OOP i C++, syntes jeg det virker mærkeligt, at vis man skal putte noget input fra en linje, ind i en variable i en classe via en setter metode, bliver man nødt til først, at putte den ind i en anden variable først. Er der ikke en metode ligsom getline der bare retunere en linje istedet for at putte den ind i en variable?

Eller er der nogen ide med, at det er lavet som det er?

.:edit:.

vis det kan hjælpe, så er det det her kode jeg syntes ser lidt grimt ud (de to temp integers)
Fold kodeboks ind/udKode 






Indlæg senest redigeret d. 16.11.2008 13:22 af Bruger #13669
8 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Du kan vel lave en funktion selv:

Fold kodeboks ind/udKode 




Men er der ikke en bedre måde. Jeg kan da ikke være den første der har haft behov fra at tage noget fra cin og putte det direkte ind i et objekt gennem en setter metode. Findes der ikke sådan en funktion i standerart libariet, eller er der en helt anden måde at gøre det på?

ind til vidre bruger jeg bare din metode, så tak for svaret :D



Der er ca. en milliard forskellige måder at gøre det på, hvilken der er bedst afhænger af de nærmere omstændigheder.

Man kunne f.eks. lave en overload af placePiece, der tager en std::istream som input, så man kan kalde den med:
board.placePiece(std::cin, 'X');

Men Roberts løsning er også fin, men du skal passe på med at bruge den som:
board.placePiece(readInt(), readInt(), 'X');
Da du ikke kan vide hvilken af de to parametre der så vil blive læst først.




Men Roberts løsning er også fin, men du skal passe på med at bruge den som:
board.placePiece(readInt(), readInt(), 'X');
Da du ikke kan vide hvilken af de to parametre der så vil blive læst først.


True...på x86 arkitekturen (medmindre du ændrer calling convention i compileren) er det sidste parameter, som sættes først, så i ovenstående tilfælde vil den midterste parameter blive læst først og første parameter læst sidst.




Man kunne f.eks. lave en overload af placePiece, der tager en std::istream som input, så man kan kalde den med:
board.placePiece(std::cin, 'X');


Vis man gør sådan, skal man så kalde cin >> variable her; inde i placePiece funktionen, eller læser den en værdi som den så sender til funktionen?



Man kunne f.eks. lave en overload af placePiece, der tager en std::istream som input, så man kan kalde den med:
board.placePiece(std::cin, 'X');


Vis man gør sådan, skal man så kalde cin >> variable her; inde i placePiece funktionen, eller læser den en værdi som den så sender til funktionen?


Fold kodeboks ind/udKode 

Måske noget i den stil.

Meeeeen det synes jeg godt nok ikke er godt design. Det binder din model til standard in/out og gør den ret ufleksibel.



Ok, tak.

Jeg vil se lidt på de forskellige ting. En af grundende til, jeg ikke kunne lide din metode (readInt()) var at jeg ikke synes at den funktion passer ind i en klasse der hedder Game, men måske kan jeg lave en util klasse eller noget...



Det skulle nok være:
void placePiece(std::istream& stream, int token)

Funktionen kan bruges med alle istreams, ikke kun standard in/out. Man kan umiddelbart få den til at læse fra en fil, eller man kunne lave sin egen class, der arver fra std::istream, men henter fra en socket, USB-porten eller hvad man nu havde brug for.



t