Kezdőlap › Fórumok › Programozás › C++ kérdések
- This topic has 119 hozzászólás, 19 résztvevő, and was last updated 18 years, 8 months telt el by
tovis.
-
SzerzőBejegyzés
-
2005-11-03-13:50 #20236782005-11-03-17:22 #2023679
„Hogyan lehet azt megoldani, hogy legyenek olyan (akár kívülrõl is elérhetõ) metódusai egy bázisosztálynak, amiket nem lehet felüldefiniálni?”
public:
virtual valami();A public miatt mindenhonnan elérhetõ, a virtual miatt átdefiniálható. (De valahol legalább egy üres függvényt mindenképpen létre kell hozni.)
(Igen gyakran használt, bár általában protecteddel…)2005-11-03-21:35 #2023680vizsla wrote:„Hogyan lehet azt megoldani, hogy legyenek olyan (akár kívülrõl is elérhetõ) metódusai egy bázisosztálynak, amiket nem lehet felüldefiniálni?”
public:
virtual valami();A public miatt mindenhonnan elérhetõ, a virtual miatt átdefiniálható. (De valahol legalább egy üres függvényt mindenképpen létre kell hozni.)
(Igen gyakran használt, bár általában protecteddel…)Hm. De nekem az lenne a célom, hogy NE lehessen felüldefiniálni.
Javaban van erre lehetõség. De c++ban?kl223
2005-11-04-07:21 #2023681„Hm. De nekem az lenne a célom, hogy NE lehessen felüldefiniálni.”
Jaj, bocs… kicsit szelektív a látásom :)))
Ilyen c++-ban tudomásom szerint nincs (egyébként a legközelebbi jelentése – változók esetében – a const)
Helyette az van, hogy csak a virtuallal definiálhatsz valamit újra… anélkül csak újat hozhatsz létre. (Tehát egy osztályon belül erre hibát írna ki.)
Magyarán szólva virtuallal a fõ* osztály már az al* osztály függvényét hívja meg. Amíg virtual nélkül a fõ* osztály csak a sajátját, amíg az al* osztály. (Az eredetit nem tudom, hogy hogy lehet elérni… max. trükkel.)*fõ amibõl származtatva van az al osztály
2005-11-04-08:07 #2023682vizsla wrote:„Hm. De nekem az lenne a célom, hogy NE lehessen felüldefiniálni.”
Jaj, bocs… kicsit szelektív a látásom :)))
Ilyen c++-ban tudomásom szerint nincs (egyébként a legközelebbi jelentése – változók esetében – a const)
Helyette az van, hogy csak a virtuallal definiálhatsz valamit újra… anélkül csak újat hozhatsz létre. (Tehát egy osztályon belül erre hibát írna ki.)
Magyarán szólva virtuallal a fõ* osztály már az al* osztály függvényét hívja meg. Amíg virtual nélkül a fõ* osztály csak a sajátját, amíg az al* osztály. (Az eredetit nem tudom, hogy hogy lehet elérni… max. trükkel.)*fõ amibõl származtatva van az al osztály
értem. Magyarán szólva a virtualnal, ha a származtatott osztályt egy szülõosztály-típusú objektumban tároljuk, akkor is a gyermekosztály fgv-je hívódik meg. Pl:
class SzuloOsztaly {
public:
virtual void kiir() { std::cout < < "SzuloOsztaly!"; }
};class GyermekOsztaly : public SzuloOsztaly {
public:
virtual void kiir() { std::cout < < "GyermekOsztaly!"; }
};Ekkor:
GyermekOsztaly a;
SzuloOsztaly b = a;
b.kiir();Kimenete „Gyermekosztaly!” lesz, hiába hogy egy „SzuloOsztaly” típusú objektumról van szó egyébként.
Azzal a nem-felüldefiniálható cuccal meg majd még kísérletezek, hátha sikerül vmit elérnem. Ha igen, írom majd.kl223
2005-11-04-14:42 #2023683Kicsit tulbonyolítod.. de végül is igen.
Annyi a lényege, hogy virtual esetén dinamikusan döntõdik el, hogy melyik függvény hajtódik végre, amíg nem virtual esetén az ami az osztályban van deklarálva. Természetesen abban az esetben, amire te gondolsz örököl egyet, meg definiál is egyet – és c++ban ez megengedett (ebben az esetben még akkor is, ha teljesen egyforma a prototípusa).Amire én gondoltam az a következõ:
class SzuloOsztaly {
public:
virtual void kiir() { std::cout < < "SzuloOsztaly!"; }
void call_kiir() { kiir(); }
};class GyermekOsztaly : public SzuloOsztaly {
public:
virtual void kiir() { std::cout < < "GyermekOsztaly!"; }
};Ekkor:
Virtual használata nélkül:
GyermekOsztaly a;
a.call_kiir(); // SzuloOsztaly!Ebben az esetben tehát 2 „kiir” létezik létezik a GyermekOsztaly-ban. (mindvégig)
(Na ez az a trükk, amirõl beszéltem.)Virtual használatával:
GyermekOsztaly a;
a.call_kiir(); // GyermekOsztaly!Ebben az esetben meg technikailag már csak egy létezik a GyermekOsztaly-ban.
2006-01-03-21:42 #20236842006-01-08-08:20 #2023685Bár ez C
de az #include direktívák mögé nem ; kell
hanem ilyenek
#inculde
#includeaztán meg elvileg az ioperm és társai fordításához be kell kapcsolni az optimalizációt és az se baj ha nem a.out lesz a kimenet
gcc -o port -O2 port.c
és futtathatod is (root-ként)
./port
Témáról bõvebben:
http://www.tldp.org/HOWTO/IO-Port-Programming.html2006-01-08-08:22 #2023686hû
a kacsacsõr jelet kiszedi a fórum
az volt a másik fórumozó baja is biztos
na lássuk így jó- eCode:#include
#include2006-01-08-08:24 #2023687nem
😡
béna vagyok
elõnézetben is kiderült volna 🙂
bocs mindenkitõl -
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.
legutóbbi hsz