dostęp do pól klasy za pomocą iteratora.
Ostatnio zmodyfikowano 2016-04-27 19:57
fazowy Temat założony przez niniejszego użytkownika |
dostęp do pól klasy za pomocą iteratora. » 2016-04-27 15:16:19 Witam, jestem początkujący, stworzyłem listę za pomocą bibliotek z STL, ale jako typ danych chcę użyć własnej klasy. klasa proces: using namespace std; int Proces::licznik_;
Proces::Proces() { licznik_++; ID_ = licznik_; }
Proces::~Proces() { } void Proces::show_id() { cout << "Proces x mam id=" << ID_ << endl; } int Proces::get_id() { return ID_; } . klasa kolejka_losowa #include "kolejka_losowa.h" #include<iostream> using namespace std;
Kolejka_Losowa::Kolejka_Losowa() { vector < Proces *> lista_1; }
void Kolejka_Losowa::dodaj( Proces * p ) { lista_1.push_back( p ); }
void Kolejka_Losowa::wyswietl() { list < Proces *>::iterator i; for( i = lista_1.begin(); i != lista_1.end(); ++i ) { cout << * i << endl; } }
void Kolejka_Losowa::usun_element( Proces * p ) { lista_1.remove( p ); }
i teraz w main chciałbym za pomocą funkcji wyświetl() wyświetlać pole ID_ z elementu Proces . W tej chwili wyświetlam tylko adresy fizyczne. Jest to możliwe? Nigdy nie używałem gotowych bibliotek <list> ani iteratorów dlatego błądzę trochę. Dzięki za pomoc. |
|
pekfos |
» 2016-04-27 16:01:45 'Problem' z twoim kodem nie ma nawet nic wspólnego z iteratorami, czy standardowymi kontenerami. Masz adres obiektu, sam to nawet zaznaczyłeś w opisie, i nie potrafisz wywołać na jego podstawie metody klasy. Gdzie problem..? |
|
michal11 |
» 2016-04-27 16:16:40 ( * i )->get_id() jakoś tak pewnie. |
|
fazowy Temat założony przez niniejszego użytkownika |
» 2016-04-27 18:09:13 Tak panowie, dzięki, w międzyczasie znalazłem rozwiązanie również na stacku. Byłem pewny że "*i" a "(*i)" nie robi różnicy. |
|
mateczek |
» 2016-04-27 19:57:26 Byłem pewny że "*i" a "(*i)" nie robi różnicy.
|
chcesz się pobawić podwójnymi wskaźnikami to masz przykład #include <iostream> #include<string>
using namespace std; struct czlowiek { string imie; int wiek; }; std::ostream & operator <<( std::ostream & s, const czlowiek & c ) { s << c.imie << " ma " << c.wiek << " lata"; } int main() { czlowiek * d[ 5 ]; czlowiek ** c = d; for( int i = 0; i < 5; i++ ) { c[ i ] = new czlowiek; } ( ** c ).imie = "marek"; ( * c )->wiek = 22; c++; ( * c )->imie = "piotrek"; ( * c )->wiek = 25; cout <<** c << endl; c--; cout <<( ** c ) << endl; for( int i = 0; i < 5; i++ ) { delete d[ i ]; }
|
|
« 1 » |