Konstruktrory
Ostatnio zmodyfikowano 2017-03-25 00:32
MoravenTolo Temat założony przez niniejszego użytkownika |
Konstruktrory » 2017-03-24 18:58:40 Witam mam takie zadanie, żeby zliczyć stworzone potwory za pomocą zmiennej statycznej oraz metoda statyczna która zwraca ich ilosć i na końcu przestowac jej działanie w funkcji main tworzac i usuwajac potwory w tablicy. I nie wiem o co chodzi z tą tablica? jak wpisać te potwory tworzone konstruktorem do tablicy? Bez tej tablicy wszystko działa i zlicza normalnie. class Monster { string name; MonsterType type; int attack; double health; static int amount; public: Monster(); Monster( const string & name, MonsterType type, int attack, double health ); ~Monster(); void print(); const string & getName() const; void setName( const string & name ); MonsterType getType() const; void setType( MonsterType type ); int getAttack() const; void setAttack( int attack ); double getHealth() const; void setHealth( double health ); int getAmount(); };
Monster * createRandomMonster();
int Monster::amount = 0;
Monster::Monster() { amount++; cout << "Zostal stworzony potwor numer " << amount << endl; }
Monster::Monster( const string & name, MonsterType type, int attack, double health ) : name( name ) , type( type ) , attack( attack ) , health( health ) { amount++; cout << "Zostal stworzony potwor numer " << amount << endl; }
Monster::~Monster() { amount--; cout << "Potwor usuniety. Zostalo " << amount << " potworow" << endl; }
void Monster::print() { cout << "Nazwa potwora: " << name << endl; cout << "Typ potwora: " << getTypeName( type ) << endl; cout << "Atak potwora: " << attack << endl; cout << "Zycie potwora: " << health << endl; }
int Monster::getAmount() { return amount; }
int main() { Player p1( "jacek", 12, 13, 15 ); p1.printPlayerData( p1 ); cout << endl; Monster m1( "igor", MonsterType::Orc, 13, 15 ); m1.print(); cout << endl; Monster m2( * createRandomMonster() ); m2.print(); cout << "zostalo stworzonych " << m1.getAmount() << " potworow"; cout << endl; return 0; }
|
|
karambaHZP |
» 2017-03-24 19:13:02 I nie wiem o co chodzi z tą tablica? |
Ale czego dokładnie nie rozumiesz? Działania tablicy? Tablica to sekwencyjnie ułożone zmienne danego typu i traktuje się je jak zwykłe zmienne z innym sposobem dostępu do nich. |
|
latajacaryba |
» 2017-03-24 22:08:54 I nie wiem o co chodzi z tą tablica? jak wpisać te potwory tworzone konstruktorem do tablicy?
|
int main() { Monster m1( "pierwszy", MonsterType::Orc, 13, 15 ); Monster m2( "drugi", MonsterType::Orc, 12, 11 ); Monster m3( "trzeci", MonsterType::Orc, 13, 12 ); Monster * wsk; wsk = new Monster[ Monster::getAmount() ]; wsk[ 0 ] = m1; }
Tak więc nie wiem, co chcesz osiągnąć. Możesz też zrobić tablicę WSKAŹNIKÓW do monster i dynamicznie alokować obiekty w tej tablicy: Monster * wsk[ 10 ] wsk[ 0 ] = new Monster(...)
|
|
karambaHZP |
» 2017-03-24 22:38:50 wsk = new Monster[ Monster::getAmount() ]; edit: #include <iostream> #include <vector> #include <memory>
class A { static int n; int num; public: A( int num ) : num { num } { ++n; } ~A() { --n; } static int getN() { return n; } const int getNum() const { return this->num; } };
int A::n = 0;
int main() { std::vector < std::unique_ptr < A >> arr; arr.push_back( std::make_unique < A >( 1 ) ); arr.push_back( std::make_unique < A >( 2 ) ); arr.push_back( std::make_unique < A >( 3 ) ); std::cout << "licznik danych wynosi " << A::getN() << '\n'; for( auto const & el: arr ) { std::cout << el->getNum() << '\n'; } if( arr.size() ) { arr.pop_back(); } std::cout << "licznik danych wynosi " << A::getN() << '\n'; for( auto const & el: arr ) { std::cout << el->getNum() << '\n'; } } |
|
Bielan |
» 2017-03-25 00:32:04 @karambaHZP, przekombinowałeś, przecież tam nie ma żadnej potrzeby używania wskaźników.
@MoravenTolo, Tablica nie jest elementem zliczania, ale przechowywania utworzonych już obiektów. Domyślam się, że treścią zadania było przechowywać utworzone obiekty w tablicy. W kwestii tablicy trzeba by było poznać oryginalną treść zadania. W kwestii zliczania:
Aby zrealizować zliczanie stworzonych obiektów wystarczy, że: 1. Klasa będzie posiadać statyczne pole typu całkowitoliczbowego 2. Konstruktor będzie zwiększał zmienną z punktu 1. o jeden. 3. Destruktor będzie zmniejszał zmienną z punktu 1. o jeden. 4. Klasa wystawi statyczną metodę, która będzie zwracać wartość z punktu 1. |
|
« 1 » |