Kezdőoldal » Számítástechnika » Programozás » Létezik ilyen osztály kapcsola...

Létezik ilyen osztály kapcsolat c++-ban?

Figyelt kérdés

Sajnos kódot nem tudok kirakni, mert csak elméletileg gondoltam végig.


Ha A osztálynak B osztály része, tehát B benne van az A-ban és A akkor B minden metódusát használja.

Az hogyan oldható meg, hogy B módosíthassa A adattagjait?


Tehát B benne van A-ban (eddig értem), de B hogy módosíthatná saját metódusaival az A adattagjait?


Google keresési tippet, egy rövid leírást, bármit elfogadok.



2016. jún. 15. 09:33
 1/4 anonim ***** válasza:
Sehogy, maximum eseményeket küldhet.
2016. jún. 15. 09:53
Hasznos számodra ez a válasz?
 2/4 anonim ***** válasza:
100%

Ha van A-nak egy "int foo;" adattagja és "B b;" objektuma akkor a b.foo() így tudja módosítani A foo adattagját:


b.bar(A *a) {

a->foo = 5;

}


Ha A-ban foo privát adattag akkor A-ban legyen egy "friend class B".

2016. jún. 15. 11:40
Hasznos számodra ez a válasz?
 3/4 anonim ***** válasza:
100%

Pontosabban:


void B::bar(A *a) {

a->foo = 5;

}


Ha B egy beágyazott osztály, akkor is tudnia kell hogy melyik objektumot kell írnia.


Kihackelhető valahogy a memóriacím, de nem érdemes a kód láthatóságát és megbízhatóságát ilyenekkel rontani:


#ifndef OUTERCLASS

#define OUTERCLASS(className, memberName) \

reinterpret_cast<className*>(reinterpret_cast<unsigned char*>(this) - offsetof(className, memberName))

#endif


(forrás: SO)

2016. jún. 15. 11:47
Hasznos számodra ez a válasz?
 4/4 A kérdező kommentje:
Kösz sikerült megcsinálnom.
2016. jún. 15. 14:12

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!