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 » |