Hirdetés
- iPhone topik
- Mobilinternet EU-n kívül, eSIM adatcsomagok használata
- Telekom T Phone 3 5G – modern tudakozó
- Google Pixel topik
- Samsung Galaxy Z Fold5 - toldozás-foldozás
- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
- Külföldi prepaid SIM-ek itthon
- Karácsonyi telefonajánló 2025
- Android szakmai topik
- Samsung Galaxy Z Fold7 - ezt vártuk, de…
Új hozzászólás Aktív témák
-
dobragab
addikt
válasz
ToMmY_hun
#3496
üzenetére
Ez C++-ban is egy erős elv, előadáson a kolléga még el is mondta, hogy nem hívunk konstruktorban / destruktorban virtuális függvényt, vagy le fogják törni a kezed. Utána belerakja ezt a ZH-ba, én meg javíthatom. Komolyan, legszívesebben annak is megadtam volna a pontot, aki B::f-et írt.
(#3492) sztanozs
A genyaság nincs még kimaxolva, szerintem sosem lehet kimaxolni. Még facsarhatjuk belőle a sz@rt kicsit.
(#3489) ToMmY_hun
Konstruálás során ugye először az ősosztály példányosodik, és mivel az említett kódban annak a példányosítása során hívunk egy virtuális függvényt, ezért nem futhat le olyan objektumhoz tartozó definíciója, ami a hívás pillanatában nem is létezik.
Ez a C++ megoldása a problémára, úgy definiálták a szabványban, hogy ilyen ne történhessen. Történhet viszont rosszabb.
Minden konstruktor csak saját magáért felelős. Így az ősosztályok konstruktorát hívja (+ virtuális örökléses blablabla), majd beállítja a vptr-t a sajátjára, aztán meghívja a tagváltozók konstruktorát, majd lefut a törzs. Fikarcnyit sem foglalkozik azzal, hogy mi van alatta. Nem tud róla, ki származik le belőle. És mivel a vptr-t is majd ezek után állítja csak be a leszármazott a saját vptr-ére, a konstruktorban a vptr még nem a leszármazottéra mutat, hanem a sajátra.
Egyébként a szabványban nincs benne sehol a vtable / vptr, nincs rögzítve, hogy úgy kell implementálni, de úgy érdemes. Sőt, a szabvány úgy lett kialakítva, ahogy a vtable-ös megoldások működnek.
A szabványban volt még egy sor, amit nem részleteztetek. A tagváltozók konstruktorában is az a fv. fog hívódni, ami a hierarchiában "nincs lejjebb", azaz a saját vagy "feljebb" van.
Ha a konstruktorban hívott f tisztán virtuális, akkor nem fog fordulni, mert a linker nem találja meg a függvényt. Tisztán virtuális függvény lehet definiálva is, ez most mellékszál. Itt nem kell a vtable-höz nyúlni, mert nyilvánvaló, melyik típusnak a függvényét kell hívni. Ha viszont nem maga hívja meg, hanem közvetve egy olyan függvény, ami nem tudja, pontosan milyen típust is kapott, akkor muszáj lesz a vtable-ben megnéznie. Akár tagváltozó konstruktorában is, mint írtam. Tadamm, így lehet tisztán virtuális függvényt meghívni.
#include <iostream>
class A;
struct member
{
A * a;
member(A* a);
};
struct A
{
member m = this;
A() { }
virtual void f() = 0;
virtual ~A() {}
};
member::member(A * a) : a(a)
{
a->f();
}
struct B : public A
{
void f() { std::cout << "B::f\n";}
};
int main()
{
B b;
return 0;
}
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Nintendo Switch 2
- Counter-Strike: Global Offensive (CS:GO) / Counter-Strike 2 (CS2)
- Békéscsaba és környéke adok-veszek-beszélgetek
- iPhone topik
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Mobilinternet EU-n kívül, eSIM adatcsomagok használata
- Vigneau interaktív lokálblogja
- Brave
- Milyen billentyűzetet vegyek?
- sziku69: Szólánc.
- További aktív témák...
- BESZÁMÍTÁS! Gigabyte B760M i3 12100F 16GB DDR4 512GB SSD RX 7600 8GB Zalman T4Plus CoolerMaster 650W
- BESZÁMÍTÁS! MSI B460M 10400F 16GB DDR4 512GB SSD RX 6600XT 8GB Rampage SHIVA Cooler Master 650W
- BESZÁMÍTÁS! MSI B450M R5 5500 16GB DDR4 512GB SSD RX 6600XT 8GB DeepCool CC560 Thermaltake 730W
- BESZÁMÍTÁS! ASUS H510M i5 11400F 16GB DDR4 512GB SSD RX 6600XT 8GB Zalman T4 Plus Cooler Master 650W
- BESZÁMÍTÁS! ASUS H510M i5 11400F 16GB DDR4 512GB SSD RX 6700 10GB Zalman T4 Plus Chieftec 650W
- Apple iPhone Air Space Black 256 GB Használt, újszerű 100% akku / 7 ciklus Garancia 2026.
- HYPERX ALLOY FPS mechanikus billentyűzet - Cherry MX RED
- Eladó Samsung Galaxy S22 Ultra 12/256GB / 12 hó jótállás
- Apple iPhone 15 Pro 128GB, Kártyafüggetlen, 1 Év Garanciával
- Samsung Galaxy S24 / 8/128GB / Kártyafüggetlen / 12 Hó Garancia
Állásajánlatok
Cég: BroadBit Hungary Kft.
Város: Budakeszi
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Talán valami pólót is nyomtatunk.


