• 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

VPS Starter Arubacloud
0 głosów
274 wizyt
pytanie zadane 20 marca 2017 w C i C++ przez Nekronomik Użytkownik (600 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 VIP (106,230 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,420 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 (20,930 p.)
Co rozumiesz przez surowe i dlaczego nie są dobre
1
komentarz 21 marca 2017 przez draghan VIP (106,230 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 Mędrzec (172,590 p.)
komentarz 21 marca 2017 przez Szahid Pasjonat (20,930 p.)
Dzięki za odpowiedzi
0 głosów
odpowiedź 20 marca 2017 przez Nekronomik Użytkownik (600 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 Mędrzec (172,590 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 VIP (106,230 p.)
Ohyda.
komentarz 21 marca 2017 przez criss Mędrzec (172,590 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 Mędrzec (155,460 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 634 wizyt
0 głosów
1 odpowiedź 263 wizyt
pytanie zadane 4 października 2016 w C i C++ przez Kuba321 Użytkownik (730 p.)
0 głosów
2 odpowiedzi 167 wizyt

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...