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

Jak wyłuskać orginalny obiekt i modyfikować go?

Ostatnio zmodyfikowano 2016-03-10 14:23
Autor Wiadomość
mrci
Temat założony przez niniejszego użytkownika
Jak wyłuskać orginalny obiekt i modyfikować go?
» 2016-03-10 12:29:30
Cześć!

Mam pewien problem! Posiadam dwie klasy,10 obiektów drugiej występują w pierwszej.Problem jest następujący:
getujac jeden z obiektów klasy drugiej i wprowadzajac na nim zmiany to nie utrwalają sie one. Podejrzewam, że raczej działam na kopii tego obiektu a nie orginale, lecz nie mam pojęcia jak dostać się własnie do tego orginału.

#include <iostream>
using namespace std;

class Druga{
private:
       int liczba;
public:
       Druga(){liczba=0;}
       void set_liczba(int a){liczba=a;}
       void show(){cout<<liczba<<endl;}
};

class Pierwsza{
private:
Druga *d;
public:
Pierwsza(){d=new Druga[10];}
Druga get(int id){return d[id];}
};

int main()
{
   Pierwsza p;
   p.get(5).set_liczba(33);
   p.get(5).show();
}

Jak widać obiekt nr 5. nie zmienił się na 33.
Z góry dziękuję za pomoc :)
P-145847
michal11
» 2016-03-10 13:46:36
Funkcja get zwraca obiekt czyli jest tworzona kopia, oddaj referencje i powinno działać, dodatkowo musisz napisać jeszcze destruktor który będzie zwalniał pamięć alokowaną w konstruktorze.
P-145851
mrci
Temat założony przez niniejszego użytkownika
» 2016-03-10 14:23:20
Dzięki za radę :)
Poniżej wrzucam działający kod, w razie jak by ktoś kiedyś potrzebował :P

#include <iostream>
using namespace std;

class Druga{
private:
       int liczba;
public:
       Druga(){liczba=5;}
       void set_liczba(int a){liczba=a;}
       void show(){cout<<liczba<<endl;}
};

class Pierwsza{
private:
Druga *d;
public:
Pierwsza(){d=new Druga[10];}
Druga* get(int id){return &d[id];}
};

int main()
{
   Pierwsza p;
   p.get(5)->set_liczba(33);
   p.get(5)->show();
}
P-145852
« 1 »
  Strona 1 z 1