Ha van egy osztályom (A) és van egy (B) akkor ezt, hogyan kell megoldani?
Az A osztályban van példányosítva egy B osztály azért,hogy használhassam A osztályban a B-t.
Példa:
class A {
B b ;
} ;
class B {
B( int i ) ;
} ;
A példámban a B konstruktora vár egy paraméterre.
Ha én létrehozom az A egy példányát és el akarnám érni velem a B egy adattagját akkor így próbálkoznék.
A a ;
a.b.b egy adattagja.
Az a baj,hogy a b vár egy bemenő paramétert és hogyan oldjam meg,hogy át lehessen adni neki.
Nem tudom jobban kifejtetni magam.
class A {
public:
A()
B b ;
};
class B {
public:
B(short i2) { i = i2; }
short i ;
};
int main() {
A a ;
a.b.i ;
return 0 ;
}
De ez így nem jó mert a b vár egy bemenő paraméterre.
Ez a baj ezt kéne megoldani.És nem lehet alapértelmezett értéket használni.





Amikor az A-ban lévő b-t inicializálod, beállítod, akkor egy már létező B egy példányát használod. Amikor azt a példányt létrehozod, akkor adod át B konstruktorának paraméterét.
Tehát, mivel B-t csak egy "new B(3)" szerű módon hozhatod létre, ezért valahol a kódban kell lennie egy ilyennek, különben az A.b null marad, mint a példád main-jében.
Így működne:
A a;
a.b = new B(5);
valamit-csinálsz(a.b.i);
return 0;
Persze ez az egész így sok más szempontból sem jó és szép.





Az első nagyon Java-san közelíti meg a dolgot, pedig ez C++ kód.
Az a lényeg, hogy A konstruktora előtt lefut B konstruktora. Ha B-nek nincs default (paraméterek nélkül hívható) konstruktora, akkor bizony A-ban explicit inicializálni KELL B-t. Az inicializáló listával:
A(): B(0) {}
Vagy ha szabályozni akarod, akkor A konstruktorának adj egy paramétert:
A(int x): B(x) {}
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!