C++. Miért kell statikussá tenni az osztály tagfüggvényét, hogy másik osztály tagfüggvénye indirekten meghívhassa?
Figyelt kérdés
Miért nem lehet csak úgy egyszerűen átadni a függvény kezdőcímét, mint C-ben?2015. jún. 24. 20:08
1/11 anonim válasza:
A this pointer miatt. A tagfüggvényből eléred a példány belső adattagjait, ezért nincs értelme példány nélkül meghívni. Illetve ha nem kell this és meg akarod hívni példány nélkül, akkor statikussá kell tenned.
2/11 anonim válasza:
Pont ez az objektumorientáltság egyik lényege :)
3/11 A kérdező kommentje:
Hát annyit még az egységbe zárásról, hogy private tagra mutató pointert ha kiadom, akkor bármi más példány, statikus külső hívás megváltoztatja annak tartalmát. Ez ellenkezik az egységbe zárás alapgondolatával, mert csak azt bizonyítja, hogy futásidőben nem védi az objektumintegritást semmi sem. Ez a bug sajnos a C11-et is érinti, amivel dolgozok.
2015. jún. 24. 23:48
4/11 anonim válasza:
Oké először kb. névtér helyett akarsz osztályt használni. Majd arról panaszkodsz, hogy a C++ miért nem védi futásidőben az objektumot? Elárulom a C++-ban ez nem egy bug. Ez nem egy tisztán objektum orientált nyelv, de miért akarsz akkor függvénypointer használni? WTF
5/11 anonim válasza:
"Miért nem lehet csak úgy egyszerűen átadni a függvény kezdőcímét, mint C-ben?"
Persze, meg lehet így kerülni az OP paradigmát, mivel futáskor már nincs ilyen védelem, csak a fordító ellenőrzi, hogy mindenki ahhoz fér hozzá, amihez szabad neki. Csak minek bűvészkedni, illetve akkor miért nem használsz sima C-t. Ha C++-t akarsz használni, akkor érdemes követni az általa elvárt szemléletet. (Nem beszólás, csak javaslat.)
6/11 anonim válasza:
Ennyi erővel a const is bugos mert megtudom változtatni futásidőben ha akarom.
7/11 anonim válasza:
C-ben nyelvi szinten nincsenek osztályok, így ott arról is értelmetlen beszélni, hogy valami static.
8/11 A kérdező kommentje:
"C-ben nyelvi szinten nincsenek osztályok, így ott arról is értelmetlen beszélni, hogy valami static."
Ez sem igaz, mert függvénytörzsön belül lefoglalhatsz statikus memóriát is, ami abban a szkópban értelmezett
2015. jún. 25. 20:05
9/11 A kérdező kommentje:
Egyébként meg azért van erre szükségem, mert több állapotgéptől függően dinamikusan kell menürendszert felépítenem, és nagyon zavaró, hogy minden egyes alkalommal this pointerek gyűjtőstruktóráit kell átadogatnom a statikus függvényeknek.
2015. jún. 25. 20:11
10/11 anonim válasza:
Nem igazán értem a problémádat. Miért használsz statikus tagfüggvényt, ha közben objektumokkal akarsz dolgozni? A statikus tagfüggvény lényege, hogy nem kötődik objektumhoz, csak az osztályhoz. Gyakorlatilag ha kiteszed egy névtérbe, akkor is ugyanott vagy. A C-s függvény pointerek helyett meg ott az std::function és az std::bind.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!