• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przypisanie adresu klasy AA do klasy BB

Staż IT w Comarch
0 głosów
107 wizyt
pytanie zadane 20 marca 2017 w C i C++ przez Nekronomik Początkujący (440 p.)

Witam, mam taki oto kod napisany dla testów:

class AA
{
	public:
		AA *nowy_AA;
};

class BB
{
	public:
		BB *nowy_BB;
};
BB bb;

void testy()
{
	AA *nowy=new AA;
	bb.nowy_BB=nowy;
}

Po kompilacji wywala mi błąd dla "bb.nowy_BB=nowy;" [Error] cannot convert 'AA*' to 'BB*' in assignme

Czy jest jakiś sposób aby w bb.nowy_BB był zapisany adres obiektu "nowy".
Wiem że można użyć np. dziedziczenia czy nawet działać na klasach abstrakcyjnych ale nigdy nie mogłem rozwiązać tego problemu w tym przykładzie. Możliwe że jest to bardzo proste albo po prostu tak nie można robić.

4 odpowiedzi

+1 głos
odpowiedź 20 marca 2017 przez draghan Szeryf (97,930 p.)

Możliwe że jest to bardzo proste albo po prostu tak nie można robić.

Oczywiście że tak nie można robić. Obiekt klasy AA to nie jest obiekt klasy BB i całkiem słusznie zabronione jest przypisanie adresowe.

Możesz wykorzystać tutaj dziedziczenie i operować wskaźnikiem do klasy bazowej, ale to nie jest rozwiązanie do wszystkich zastosowań - innymi słowy: czym konkretnie mają być klasy AA i BB?

0 głosów
odpowiedź 20 marca 2017 przez koczurekk Gaduła (3,380 p.)
Wskaźnik jednego typu nie może wskazywać na coś zupełnie innego i nie powiązanego, bo coś takiego w ogóle nie ma sensu. Powiedz co chcesz osiągnąć, na pewno jest lepsze rozwiązanie Twojego problemu.

Zwłaszcza, że w C++ surowe wskaźniki od dawna nie są dobrym rozwiązaniem żadnego problemu.
komentarz 21 marca 2017 przez Szahid Pasjonat (18,180 p.)
Co rozumiesz przez surowe i dlaczego nie są dobre
1
komentarz 21 marca 2017 przez draghan Szeryf (97,930 p.)

Surowy wskaźnik to 'zwykły' wskaźnik:

Type *instance_handle;

Dlaczego są złe? Bo są przyczyną sporej klasy błędów. Głównie z powodu niejasności oznaczenia własności. Jeśli dostajesz skądś jakiś wskaźnik, to nie wiesz czy możesz i czy w ogóle powinieneś zwolnić pamięć mu przydzieloną. Ponadto surowe wskaźniki nie gwarantują zwolnienia zajętej pamięci w przypadku opuszczenia zakresu (czy to przez wyjątek czy przez zwykłe return).

Co zamiast surowych wskaźników? Albo nie bawić się wskaźnikami, albo stosować wskaźniki inteligentne (np. z biblioteki standardowej), albo w ostateczności chociaż oznaczać wskaźniki-właścicieli jako owner<T*> (szukaj: guideline support library).

1
komentarz 21 marca 2017 przez Criss VIP (132,140 p.)
komentarz 21 marca 2017 przez Szahid Pasjonat (18,180 p.)
Dzięki za odpowiedzi
0 głosów
odpowiedź 20 marca 2017 przez Nekronomik Początkujący (440 p.)
Tak własnie myślałem że się nie da...
Dzięki za szybką odpowiedź.
Ogólnie chciałem to wykorzystać do czegoś czego nie do końca rozumiem.
Dokładnie chciałem wykorzystać adresy obiektów z listy dwukierunkowej w drzewie czwórkowym bo lista jak i drzewo czwórkowe to u mnie dwie osobne klasy.
komentarz 21 marca 2017 przez Criss VIP (132,140 p.)

W zasadzie, to się da, ale sensu to za bardzo nie ma.

AA *nowy = new AA;
bb.nowy_BB = reinterpret_cast<BB *>(nowy);
komentarz 21 marca 2017 przez draghan Szeryf (97,930 p.)
Ohyda.
komentarz 21 marca 2017 przez Criss VIP (132,140 p.)
Jasne, że tak :D Chciałem tylko zaznaczyć, że jak by co, to się da.
0 głosów
odpowiedź 21 marca 2017 przez mokrowski Maniak (67,420 p.)
Wprowadź klasę interfejsu i ją zaimplementuj w AA i BB. Myślę że wystarczy Ci to do zbudowania uniwersalnego kontenera (vide inny wątek związany z drzewem czwórkowym).

Podobne pytania

0 głosów
2 odpowiedzi 114 wizyt
0 głosów
2 odpowiedzi 66 wizyt
0 głosów
1 odpowiedź 62 wizyt
pytanie zadane 4 października 2016 w C i C++ przez Kuba321 Użytkownik (680 p.)
Porady nie od parady
Komentarze do pytań nie służą do odpowiadania, od tego jest wydzielona sekcja odpowiedzi. Funkcją komentarzy jest natomiast możliwość uzyskania dodatkowych informacji na temat samego posta.
Ciekawy innych porad? Odwiedź tę stronę!

48,520 zapytań

90,114 odpowiedzi

181,385 komentarzy

23,478 pasjonatów

Przeglądających: 109
Pasjonatów: 0 Gości: 109

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...