Kezdőoldal » Számítástechnika » Programozás » Meg lehet az alábbit csinálni...

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

Figyelt kérdés
Egy függvényt szeretnék, aminek többféle osztály is lehet az argumentuma. De nem akarom mindegyikre külön megírni, mert az implementációja ugyanaz, viszont nem akarom teljesen általános típusra, azaz szeretném korlátozni, hogy pontosan mire legyen értelmezve. De amikre értelmezve van, azok nem egy ősosztályból származnak, mert azoknak az implementációja viszont lényegesen eltér.

2012. aug. 23. 22:30
 1/8 anonim ***** válasza:
Ha lényegesen eltér az implementációjuk, akkor a függvény hogyan tudná mindegyikkel ugyanazt megcsinálni?
2012. aug. 23. 23:46
Hasznos számodra ez a válasz?
 2/8 A kérdező kommentje:
ugyanazok az alapfüggvényeik vannak, de a függvények implementációja jelentősen eltér.
2012. aug. 24. 07:15
 3/8 A kérdező kommentje:
A lényeg, hogy lehet-e korlátozni, hogy milyen tipusokat engedünk meg.
2012. aug. 24. 07:15
 4/8 anonim ***** válasza:

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.

2012. aug. 24. 10:11
Hasznos számodra ez a válasz?
 5/8 iostream ***** válasza:
Lehetséges, amit mondasz, de template bűvészkedést igényel. Mennyire akarod lekorlátozni?
2012. aug. 24. 10:12
Hasznos számodra ez a válasz?
 6/8 A kérdező kommentje:

Mit értesz azalatt, hogy mennyire?

Ha lehet, milyen címszó alatt nézzek utána?

2012. aug. 24. 11:09
 7/8 iostream ***** válasza:

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.

2012. aug. 24. 13:02
Hasznos számodra ez a válasz?
 8/8 anonim ***** válasza:
Azt áruld már el, mi kifogásod van az ellen, hogy egy közös interface őst használj? :D
2012. aug. 24. 13:20
Hasznos számodra ez a válasz?

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

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!