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

dostęp do pól klasy za pomocą iteratora.

Ostatnio zmodyfikowano 2016-04-27 19:57
Autor Wiadomość
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:
C/C++
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
C/C++
#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.
P-147722
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..?
P-147724
michal11
» 2016-04-27 16:16:40
( * i )->get_id()

jakoś tak pewnie.
P-147725
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.
P-147729
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
C/C++
#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++; //następny w tablicy
    ( * c )->imie = "piotrek";
    ( * c )->wiek = 25;
    //*c->wiek=22; //tak nie da rady
    //**c.wiek=23  // nie da rady
    cout <<** c << endl; // tu nie ma znaczenia :P
    c--;
    cout <<( ** c ) << endl; // tu nie ma znaczenia :P
   
    for( int i = 0; i < 5; i++ ) {
        delete d[ i ];
    }
P-147733
« 1 »
  Strona 1 z 1