Klasa pochodna i zapis wskaźnika
Ostatnio zmodyfikowano 2022-02-06 21:20
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: 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 ? |
|
pekfos |
» 2022-02-03 22:35:04 Po prostu przypisz. 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; |
|
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
|
|
pekfos |
» 2022-02-04 17:02:56 |
|
Nekronomik Temat założony przez niniejszego użytkownika |
» 2022-02-04 19:47:33 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 ); |
|
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? |
|
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 |
|
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: 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. |
|
« 1 » 2 3 |