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

Klasa pochodna i zapis wskaźnika

Ostatnio zmodyfikowano 2022-02-06 21:20
Autor Wiadomość
Nekronomik
Temat założony przez niniejszego użytkownika
Klasa pochodna i zapis wskaźnika
» 2022-02-03 21:56:48
Witam, czy zna ktoś sposób na zapisanie/przechwycenie wskaźnika w klasie pochodnej? Przykładowy kod:
C/C++
class Obiekty
{
private:
public:
   
Obiekty()
   
{
       
    }
   
virtual void Dane() = 0;
};
class AA
    : public Obiekty
{
private:
public:
   
AA()
   
{
       
    }
   
virtual void Dane() { }
}
;
class BB
    : public Obiekty
{
private:
public:
   
Obiekty * zapisz_1;
   
Obiekty * zapisz_2;
   
BB()
   
{
       
zapisz_1 = NULL;
       
zapisz_2 = NULL;
   
}
   
virtual void Dane()
   
{
       
cout << zapisz_1 << " " << zapisz_2 << endl;
   
}
}
;
void Test()
{
   
Obiekty * nowy_1 = new AA;
   
Obiekty * nowy_2 = new AA;
   
Obiekty * nowy_3 = new BB;
}
I teraz w jak najprostszy sposób zapisać w obiekcie nowy_3 wskaźniki obiektów nowy_1 i nowy_2 dla zapisz_1 i zapisz_2 ?
P-179257
pekfos
» 2022-02-03 22:35:04
Po prostu przypisz.
C/C++
Obiekty * nowy_1 = new AA;
Obiekty * nowy_2 = new AA;
BB * nowy_3 = new BB;
nowy_3->zapisz_1 = nowy_1;
nowy_3->zapisz_2 = nowy_2;
P-179258
Nekronomik
Temat założony przez niniejszego użytkownika
» 2022-02-03 22:46:59
Problem jest taki że nowy_3 nie należy już do klasy abstrakcyjnej Obiekty
P-179259
pekfos
» 2022-02-04 17:02:56
P-179261
Nekronomik
Temat założony przez niniejszego użytkownika
» 2022-02-04 19:47:33
C/C++
Obiekty * nowy_1 = new AA;
Obiekty * nowy_2 = new AA;
BB * nowy_3 = new BB;

nowy_3->zapisz_1 = nowy_1;
nowy_3->zapisz_2 = nowy_2;

Obiekty * nowy_4 = new BB;

nowy_4 = dynamic_cast < BB * >( nowy_3 );
nowy_4->Dane();
Udało mi się takie coś stworzyć i działa (nie wiem czy jest to prawidłowy zapis). W przykładzie "Rzutowanie w dół" kp w moim przypadku było by dalej klasą pochodną.
Czyli zamiast
kp = dynamic_cast < Kwadrat * >( p );
 to prawidłowo działa
p = dynamic_cast < Kwadrat * >( kp );
P-179263
pekfos
» 2022-02-04 20:47:20
W przykładzie "Rzutowanie w dół" kp w moim przypadku było by dalej klasą pochodną.
To po co robisz te rzutowanie jak masz już wskaźnik na właściwy typ? Na czym w końcu polega ten problem?
P-179264
Nekronomik
Temat założony przez niniejszego użytkownika
» 2022-02-04 21:12:47
Problem przedstawiłem na początku. chce dostać się/przypisać/zapisać wskaźnik w zapisz_1 i zapisz_2 który znajduje się w klasie pochodnej BB  
zapis typu:
Obiekty * nowy_3 = new BB;
nowy_3 ->zapisz_1=nowy_1 nie wchodzi w grę bo zapisz_1 należy tylko i wyłącznie do klasy BB
P-179265
DejaVu
» 2022-02-05 10:59:09
Z tego co przeczytałem ten wątek to rozwiązanie, które pekfos Ci podał jest poprawne. Jedyne co bym skorygował to:
C/C++
AA * nowy_1 = new AA;
AA * nowy_2 = new AA;
BB * nowy_3 = new BB;
nowy_3->zapisz_1 = nowy_1;
nowy_3->zapisz_2 = nowy_2;
Do wskaźnika typu bazowego zawsze bezproblemowo się zapisuje adres. Gorzej z relacją w drugą stronę i tu pojawia się np. dynamic_cast (które nie zawsze się sprawdza) lub inne techniki, które potrafią być wygodniejsze w użyciu, jednak wymagają pisania większej ilości kodu.

/edit:
W każdym razie proponowałbym Ci, abyś opisał co chcesz zaprojektować, bo może niepotrzebnie komplikujesz architekturę już na samym początku i pchasz się w kod, który później będzie trudny do utrzymywania/rozwijania.
P-179266
« 1 » 2 3
  Strona 1 z 3 Następna strona