Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

obiekty do listy STL

Ostatnio zmodyfikowano 2017-06-13 19:57
Autor Wiadomość
CTRL85
Temat założony przez niniejszego użytkownika
obiekty do listy STL
» 2017-06-12 17:44:05
Struktura kody wygląda tak:

C/C++
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' )
    {
       
    }
   
};
//Jeszcze kilka klas dziedziczących z NPC

class room {
   
    list < NPC > characters;
   
    void AddCharacter( char type ) {
        //DODWANIE DO LISTY
    }
}

Jak zrobić, abym do listy mógł wrzucić dowolny z obiektów dziedziczących z NPC?
P-162437
mateczek
» 2017-06-12 17:57:54
wskaźnik na obiekt możesz wrzucić. Sam obiekt nie !!!
C/C++
#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;
    }
   
};
//Jeszcze kilka klas dziedziczących z NPC

int main() {
    vector < NPC * > characters;
    characters.push_back( new Human );
    characters.push_back( new Wizard );
    characters[ 0 ]->przedstawSie();
    characters[ 1 ]->przedstawSie();
   
}
P-162441
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:

C/C++
class roomList {
    vector < room *> rooms;
   
    void addRoom( int index, char type );
    void showRoom();
   
    //kilka innych metod
}

class room {
    vector < NPC *> characters;
   
    addCharacter( char type );
    showCharacters();
   
    //kilka innych metod
}

class NPC {
    int strength;
    char code;
   
    NPC();
}
class Human
    : public NPC
{
    Human();
}
//kilka klas dziedziczących z NPC

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.
P-162489
mateczek
» 2017-06-13 18:28:54
P-162493
CTRL85
Temat założony przez niniejszego użytkownika
» 2017-06-13 19:57:07
przerobiłem tak:

C/C++
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.
P-162498
« 1 »
  Strona 1 z 1