obiekty do listy STL
Ostatnio zmodyfikowano 2017-06-13 19:57
CTRL85 Temat założony przez niniejszego użytkownika |
obiekty do listy STL » 2017-06-12 17:44:05 Struktura kody wygląda tak: class NPC { private: int strength; const char code; public: NPC( char CODE ) : code( CODE ) { strength = 1; } }; class Human : public NPC { public: Human() : NPC( 'H' ) { } }; class Wizard : public NPC { Wizard() : NPC( 'W' ) { } };
class room { list < NPC > characters; void AddCharacter( char type ) { } }
Jak zrobić, abym do listy mógł wrzucić dowolny z obiektów dziedziczących z NPC? |
|
mateczek |
» 2017-06-12 17:57:54 wskaźnik na obiekt możesz wrzucić. Sam obiekt nie !!! #include<vector> #include<iostream> using namespace std; class NPC { private: int strength; const char code; public: NPC( char CODE ) : code( CODE ) { strength = 1; } virtual void przedstawSie() { } }; class Human : public NPC { public: Human() : NPC( 'H' ) { } void przedstawSie() { cout << "to ja człowiek" << endl; } }; class Wizard : public NPC { public: Wizard() : NPC( 'W' ) { } void przedstawSie() { cout << "to ja czarodziej" << endl; } };
int main() { vector < NPC * > characters; characters.push_back( new Human ); characters.push_back( new Wizard ); characters[ 0 ]->przedstawSie(); characters[ 1 ]->przedstawSie(); } |
|
CTRL85 Temat założony przez niniejszego użytkownika |
» 2017-06-13 17:09:25 Mam jeszcze jeden problem - potrzebuję przyspieszyć program, ponieważ nie spełniam limitów czasowych. Szkielet kodu wygląda tak: class roomList { vector < room *> rooms; void addRoom( int index, char type ); void showRoom(); }
class room { vector < NPC *> characters; addCharacter( char type ); showCharacters(); }
class NPC { int strength; char code; NPC(); } class Human : public NPC { Human(); }
Szczerze mówiąc nie za bardzo mam pomysł jak mógłbym to poprawić. W klasie roomList muszę dodawać elementy do wektora zarówno na początek, w środek i na koniec, w klasie room zawsze dodaję NPC na koniec. Mogę wrzucić mój kod dodawania elementów, jeśli to potrzebne, ale wątpię, aby ewentualna poprawa tych metod wiele zmieniła. |
|
mateczek |
» 2017-06-13 18:28:54 |
|
CTRL85 Temat założony przez niniejszego użytkownika |
» 2017-06-13 19:57:07 przerobiłem tak: class roomList { list < room *> rooms; void addRoom( int index, char type ) { if( index > maxIndex ) { maxIndex = index; if( minIndex > maxIndex ) minIndex = maxIndex; rooms.push_back( new room( index, type ) ); } else if( index < minIndex ) { minIndex = index; if( minIndex > maxIndex ) maxIndex = minIndex; rooms.push_front( new room( index, type ) ); } else { for( list < room *>::iterator temp = rooms.begin(); temp != rooms.end(); temp++ ) { if(( * temp )->getNumberOfRoom() < index ) { if(( *( ++temp ) )->getNumberOfRoom() > index ) { rooms.insert( temp, new room( index, type ) ); break; } else --temp; } else if(( * temp )->getNumberOfRoom() == index ) { ( * temp )->AddCharacter( type ); break; } } } } } Ale ciągle jest niewystarczająco. Myślałem, zeby zrobić w klasie dynamiczną tablice w której bym przechowywał numery pokojów, ale nie wiem, czy to coś zmieni. |
|
« 1 » |