Kezdőoldal » Számítástechnika » Programozás » C++. Miért kell statikussá...

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 2
 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.
2015. jún. 24. 20:54
Hasznos számodra ez a válasz?
 2/11 anonim ***** válasza:
Pont ez az objektumorientáltság egyik lényege :)
2015. jún. 24. 21:29
Hasznos számodra ez a válasz?
 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:
100%
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
2015. jún. 25. 00:53
Hasznos számodra ez a válasz?
 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.)

2015. jún. 25. 01:49
Hasznos számodra ez a válasz?
 6/11 anonim ***** válasza:
Ennyi erővel a const is bugos mert megtudom változtatni futásidőben ha akarom.
2015. jún. 25. 02:42
Hasznos számodra ez a válasz?
 7/11 anonim ***** válasza:
C-ben nyelvi szinten nincsenek osztályok, így ott arról is értelmetlen beszélni, hogy valami static.
2015. jún. 25. 18:03
Hasznos számodra ez a válasz?
 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.
2015. jún. 25. 21:09
Hasznos számodra ez a válasz?
1 2

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!