13. marts 2005 - 20:21Der er
11 kommentarer og 1 løsning
Pæn måde at arbejde med koordinater
Hej eksperter
Jeg vil gerne lige have et råd vedrørende et program hvori jeg skal bruge koordinater (arbejder i 2d så kun x og y). Programmet skal kunne gøre følgende ting med koordinaterne: * Se om de er ens * Flytter dem en tak i hver af aksernes retninger.
Selv har jeg overvejet at lave et koordinat som en klasse og derefter lade en udenforstående funktion stå for sammenligningerne. Overvejer lidt at overloade ==.
Nu står jeg bare tilbage med problemet om hvordan jeg griber problemet med at flytte dem et punkt. Altså enten lægge 1 eller -1 til enten y eller x-værdien. Min bedste ide er at lave funktioner der hedder xplus, xminus osv i klassen.
Findes der ikke en smartere metode til at gribe dette an på?
int main() { PointClass P1(10, 10), P2(10, 11), P3(10, 10); if(P1 == P3) std::cout << "P1 and P3 is at same spot" << std::endl; if(P1 != P2) std::cout << "P1 and P2 is not at same spot" << std::endl; --P2.Y; if(P1 == P2) std::cout << "P1 and P2 is at same spot" << std::endl;
bertelbrander >> Mange tak for eksemplet, må indrømme jeg ikke helt har tænkt i den retning. Har bare lige et spørgsmål. Bruger man ofte det at have en klasse inden i en anden?
Tænkte lige på, hvis jeg ændrer koden til følgende:
#include <iostream>
class PointClass { public: PointClass(int aX, int aY) : X(aX), Y(aY) {} bool operator == (const PointClass &rhs) { return X == rhs.X && Y == rhs.Y; } bool operator != (const PointClass &rhs) { return !(operator == (rhs)); }
int X; int Y; }
int main() { PointClass P1(10, 10), P2(10, 11), P3(10, 10); if(P1 == P3) std::cout << "P1 and P3 is at same spot" << std::endl; if(P1 != P2) std::cout << "P1 and P2 is not at same spot" << std::endl; --P2.Y; if(P1 == P2) std::cout << "P1 and P2 is at same spot" << std::endl; }
SÅ virker det stadig. Hvad er fordelen ved CoorClass så?
I dette simple eksempel er der ikke den store fordel ved at bruge CoorClass frem for en almindelig int, men,
Hvis PointClass bruges til at repræsentere en mand i et shoot-em-up spil, kunne man bruge ++ og -- operatoren i CoorClass til at flytte manden på skærmen.
Igen mange tak for jeres svar. Jeg har fået det til at virke efter planen så det kunne ikke være meget bedre
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.