• 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

0 głosów
105 wizyt
pytanie zadane 20 marca w C i C++ przez Nekronomik Początkujący (420 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 przez draghan Szeryf (92,030 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 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 przez Szahid Pasjonat (15,580 p.)
Co rozumiesz przez surowe i dlaczego nie są dobre
1
komentarz 21 marca przez draghan Szeryf (92,030 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 przez Criss VIP (111,880 p.)
komentarz 21 marca przez Szahid Pasjonat (15,580 p.)
Dzięki za odpowiedzi
0 głosów
odpowiedź 20 marca przez Nekronomik Początkujący (420 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 przez Criss VIP (111,880 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 przez draghan Szeryf (92,030 p.)
Ohyda.
komentarz 21 marca przez Criss VIP (111,880 p.)
Jasne, że tak :D Chciałem tylko zaznaczyć, że jak by co, to się da.
0 głosów
odpowiedź 21 marca przez mokrowski Nałogowiec (29,980 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 95 wizyt
pytanie zadane 4 września 2016 w C i C++ przez pewien_programista Użytkownik (840 p.)
0 głosów
2 odpowiedzi 59 wizyt
0 głosów
1 odpowiedź 58 wizyt
pytanie zadane 4 października 2016 w C i C++ przez Kuba321 Użytkownik (600 p.)

37,207 zapytań

74,334 odpowiedzi

144,045 komentarzy

17,209 pasjonatów

Przeglądających: 132
Pasjonatów: 25 Gości: 107

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.

...