Just nu i M3-nätverket
Gå till innehåll

Onp

Medlem
  • Antal inlägg

    44
  • Gick med

  • Senaste besök

    Aldrig
  1. Ursäkta min lathet... http://www.cprogramming.com/tutorial/lesson10.html [inlägget ändrat 2004-07-22 23:44:23 av Onp]
  2. Okej, nice. Ska kolla upp det. Tack för hjälpen.
  3. Men om jag ska göra en typomvandling så måste jag ju veta vilken typ objektet är, och det är ju inte alltid jag vet det. T.ex. World* world; Item* item; // returnerar en Itempekare som pekar på ett Weapon-objekt item = world->GetItem("knife");
  4. Lär dig C++ på 3 veckor. Dag 12 - Arv. Sida 391: "Man kan inte komma härifrån till dit" Men jag hittar en det han refererar till :/ Det är ju exakt detta jag är ute efter.
  5. Hur ska man annars hålla reda på vilka objekt som finns i världen? Det går ju inte ha olika typer i en vektor, eller?
  6. Alltså, ni har nog missuppfattat lite. Syskonen ska inte anropa varandra. Håller på med ett äventyrsspel där jag har en klass, Item, som är basklass åt Weapon, Car, etc. Dessa härledda klasser har metoder som Shoot() och Drive(). Alltså olika metoder för hur spelaren kan interagera med dem. I min huvudklass, World (som är basklass åt alla klasser), har jag en std::vector med Item-pekare. Elementen i vektorn kan alltså innehålla härledda klasser. Problemet är alltså hur jag ska kunna anropa Weapon's och Car's metoder utifrån denna vektor med Item-pekare. Man vill ju inte gärna ha en massa virtuella metoder i klassen World, eftersom det ska vara enkelt att lägga till nya objekt.
  7. Har följande klasser: [log]class Vehicle { /* ... */ }; class Car : public Vehicle { public: void SetNumWheels(int); private: int mNumWheels; }; class Boat: public Vehicle { public: void SetNumEngines(int); private: int mNumEngines; };[/log] SetNumWheels() och SetNumEngines() är bara exempel för att illustrera metoder som är unika för respektive klass. Okej. Om jag nu gör följande: Vehicle* A = new Car; Vehicle* B = new Boat; Hur anropar jag SetNumWheels() från A? eller SetNumEngines() från B? Jag är medveten om att det går typomvandla, eller att jag skaffar en Car-pekare eller en Boat-pekare. Men jag måste på nåt sätt komma åt dessa metoder från en Vehicle-pekare. Hur löser man detta på en snyggt sätt? [inlägget ändrat 2004-07-07 21:44:14 av Onp]
  8. Hehe. Har kanske gett mig in på lite för komplicerade områden... men hur ska man annars lösa det? I spelet kan man ju skriva in olika saker, typ "take the knife", "talk to john", etc... Det som händer då är ju att den ska använda metoderna Take() och Talk() från en klass. Men Take() tar ju en Item* som parameter, och Talk() tar ju en Actor* som parameter.. Några alternativ? [inlägget ändrat 2004-07-06 16:49:10 av Onp]
  9. Tackar! Det var just (w.*itr->second)(); som var det knepigaste. Förstår inte riktigt logiken i den syntaxen, men men. Det funkar. Nu till nästa fråga =) Hur gör man om metoderna har olika parametrar? class World { public: void examine(Item* item) { item->SomeMethod(); } void open(Door* door) { door->SomeOtherMethod(); } }; Jag antar att templates har något med det här och göra. [inlägget ändrat 2004-07-05 18:46:33 av Onp]
  10. Hm. Jag måste nog använda mig av iterators eftersom jag inte vet namnet på metoden som ska anropas. Sen min fråga var nog egentligen hur syntaxen ser ut för metodpekare kontra funktionspekare. Gärna ett exempel där metodpekaren ingår i en std::map...
  11. Håller på för fullt med att lära mig C++ och har nu kommit till metodpekare. Håller på med ett litet textbaserat äventyrsspel där jag hade tänkt att när man skriver t.ex. "examine the book" så ska den leta upp metoden "examine" från en lista och exekvera den. Har kommit så här långt: map<string, void (World::*)(Player*, Item*)> functions; map<string, void (World::*)(Player*, Item*)>::iterator fiter; functions["examine"] = &World::Examine; Om det vore en vanlig funktionspekare skulle jag ju exekvera så här: fiter = functions.find("examine"); fiter->second(player, item); Men hur gör man med metodpekare? [inlägget ändrat 2004-07-03 18:31:55 av Onp]
  12. Ser lite ljusare ut nu... =) Nybörjarböckerna tar inte upp såna här grejer. Jag studerade hans kod i boken och märkte att han stoppade in en vektor som funktionsparameter när parametern skulle vara en pekare. Men han struntade i att förklara det steget
  13. Så vad jag har förstått så skiljer sig array:er sig mot vanliga variabler när det gäller pekare? int a = 6; int* b = &a; // b pekar till a int c[10]; int* d = c; // här behöver man inte använda &-operatorn // eftersom det blir automatiskt minnesadressen? [inlägget ändrat 2004-06-13 11:37:12 av Onp]
  14. 1) Vad är det för skillnad på följande syntaxer? int& rSomeRef; int & rSomeRef; int &rSomeRef; Det som förvirrar mig är att jag i boken "Lär dig C++ på 3 veckor" läste att när man deklarerar referenser så är ett mellanslag före referensoperatorn obligatoriskt... men i samma bok har jag sett honom använda "int& variabel" som parameter till en funktion. 2) Är lite förvirrad vad gäller följande kod: void Test(char* a, int* {} int main() { char a[255]; int b = 0; Test(a, ; return 0; } När jag kompilerar detta får jag felet att b inte kan omvandlas från "int" till "int *". Ändrar jag b till en pekare så går det kompilera. Alltså: void Test(char* a, int* {} int main() { char a[255]; int* b = new int; Test(a, ; return 0; } Varför klagar den inte på a?
  15. Nja, det verkar mer nu som om diskettstationen är sönder faktiskt. Eftersom jag har lyckats installera Windows 98 nu på den och den kan inte läsa några disketter alls... den frågar om disketten ska formateras hela tiden, sen står det nåt felmeddelande om man trycker 'ja'.
×
×
  • Skapa nytt...