Meg lehet az alábbit csinálni C++-ban?










Nem lehet. Illetve pont olyan módon lehet, hogy egy közös őst megadsz. De a lényeg nem ez, hanem hogy kicsit nem érted az OOP lényegét.
Ugye az a helyzet, hogy vannak A,B,C,D,E,F, stb. osztályaid, amiknek az implementációja lényegesen különbözik, de a látható függvényeik, vagy legalábbis egy részhalmazuk megegyezik, hiszen anélkül a függvényed nem tudná ugyanolyan módon kezelni őket.
Tehát mondjuk minden osztályban található egy DoSomething(), meg egy DoSomethingElse() nevű függvény, csak belül mások.
Ezt úgy mondjuk, hogy az A,B,C,D,E,F stb. osztályok felfednek egy interface-t a külvilág felé, ami a DoSomething() és DoSomethingElse() fgv.-ket tartalmazza.
Azaz, nyugodtan lehet egy ősosztálya ezeknek, ami tartalmazza a két db pure virtual function-t:
class ICommonInterface
{
public:
virtual void DoSomething() =0;
virtual void DoSomethingElse() =0;
}
És ebből az ősből származhat az összes osztályod, anélkül, hogy bármilyen default implementációt kaptak volna. Azt gondolom tudod, hogy a C++-ban lehet több őstől is örökölni.
Ami persze egy elb*szott dolog, személy szerint nekem sokkal jobban tetszik(átláthatóbb, könnyebben érthető és kezelhető) a C#-os megoldás, ahol a class mellett külön bevezették az interface-t: ott csak egy ős lehet, de bármennyi interface-t implementálhat egy adott class.





Mit értesz azalatt, hogy mennyire?
Ha lehet, milyen címszó alatt nézzek utána?





Ha csak annyira akarod lekorlátozni, hogy olyan osztállyal ne lehessen meghívni, aminek nincsenek meg az adott műveletei, akkor a template nagyon egyszerű megoldás.
Ha ennél jobban akarsz szűkíteni, akkor a template még mindig jó megoldás, de már nem annyira egyszerű. Kell egy "kapufeltétel", pl egy template struktúra, aminek a függvényben el akarod érni az adattagját, ami általános esetben nem létezik, viszont specializálod a megfelelő osztályokra, és azokba elhelyezed a megfelelő, amúgy semmit sem csináló adattagot. Így nem fordul le olyan osztállyal, amire nem adtad meg a specializációt, egyébként meg teljesen jól működik.





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!