Van pár dolog amit nem értek c/c++-ban. Mit jelentenek ezek? (többi lent)
- Mi az amikor a függvény neve után írjuk oda hogy const? tehát nem (csak) a visszatérési érték const, hanem a szignatúra után (is) ott van az hogy const?
-C++ esetén miben különbözik a struct és a class?
- Lehet-e abból gond hogy egy függvénynek const int*-ot kell visszaadni és én egy ideiglenes, a függvényben létrehozott int változó &referenciáját adom vissza visszatérési értékként?
- "int (*v)[5]" és "int* v[5]" között mi a különbség?
1. kérdés: A függvény kap egy this pointert is, ami nem szokott megjelenni a paraméterek között, és az a konstans.
2. : a structban alapértelmezetten public minden tag, classban pedig private.
3. : régen c++oztam, de azt hiszem ebben az esetben nem fordul le a program, bár nem mernék rá megesküdni.
4: Ebben sem vagyok biztos, de úgy emlékszem, hogy az indirekció precedenciája nagyobb, így az égvilágon semmi különbség nincs köztük.
1. Ezt hívjuk konstans függvénynek, a konstans függvényre az a megszorítás érvényes, hogy nem módosíthatja az osztály adatszerkezetét, amin implementálva van. Ez természetesen érvényes minden más függvényre is, amit a konstans függvényen belül meghívsz, magyarul a konstans függvény csak más konstans függvényeket hívhat meg. Konstans függvényt jellemzően getter, vagy ahhoz hasonló metódusoknál hasnálunk, ahol egy adattag, vagy adattagokból kiszámított érték visszaadása a cél.
2. Struct és class legalapvetőbb különbsége az alapértelmezett láthatóság. struct esetében public, class-nál private. Ha nagyon elmélyedsz a nyelvben, még megfigyelhetőek apró különbségek, de lényegében ennyi.
3. Igen, ugyanis a lokális változó, amire mutatni fog a pointered megszűnik, így csak memóriaszemét marad utána. Egy valamire való compiler ezt jelzi is számodra fordításkor.
4. Az első egy pointer egy 5 elemű, int típusokból álló tömbre, a másik egy 5 elemű, int* típusokból álló tömb.
int* v[5]; // array of five int*
int (*v)[5]; // pointer to array of five int
Először is a gyors válasz az hogy próbáld ki, nem kerül semmibe.
1. Azt jelenti hogy a metódus nem módosíthatja az objektumot amin hívták, azaz nem módosíthatja a mezőinek értékeit, és csak olyan metódust hívhat az objektumon ami szintén konstans.
2. A struct elemeinek alapértelmezett láthatósága public, a class-é pedig private.
3. Abból nincs gond hogy ha nem konstans változóból konstans csinálsz, de az gond hogy ha egy lokális változó memóriacímét adod vissza egy függvényben. Bár a fordító nem szól érte, de tilos ilyet csinálni.
4. Az első egy olyan pointer ami egy 5 elemű int tömbre mutat, a második egy 5 elemű int* tömb. Ha a változó neve elé írod a tömböt akkor könnyebb látni a sorrendet:
int[5] (*v)
(int*)[5] v
1. Csak olyan függvények neve után lehet írni a "const" kulcsszót, amelyek osztályhoz tartoznak.
Ezzel azt garantáljuk, hogy az a függvény nem fogja megváltoztatni az objektum egyik tulajdonságát se.
Az ilyen függvényeket a konstans objektumok is meghívhatják.
// Például:
const Osztaly obj(1,2,3); // Konstans objektum deklarálása.
obj.foo(); // Mivel az obj objektum konstans, ezért csak akkor hívhatja meg a foo() funkciót, ha a funkció neve után oda volt írva a "const" kulcsszó.
2. C-ben nem volt class csak struct. C++-ban a struct-ot leváltotta a class. C++-ban a struct csak azért maradt benne, hogy visszafélé kompatibilis legyen a C forráskódokkal.
C++-ban a struct is olyan mint a class. A kettő között csak annyi a külömbség, hogy a class-ban alapértelmezetten minden private, struct-ban alapértelmezetten minden public.
3. Ha egy változó elé oda írod a & jelet, akkor az nem referenciát jelent, hanem az az "address of" operátor.
Mivel a lokális változók csak addig foglalják a helyet a memóriában, amíg tart a funkció, ezért a funkció befejezése után már más változók foglalhatják le maguknak azt a memória területet. Úgyhogy igen, abból nagy gond lesz, ha egy lokális változó mutatóját mented el a visszatérési értékbe.
4.
int (*v)[5]; // Deklaráljuk a v-t, ami egy olyan mutató, ami 5 int-et tartalmazó tömbre mutat.
int* v[5]; // Deklaráljuk a v-t, ami egy olyan 5 elemű tömb, ami int-ekre mutató mutatókat tartalmaz.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!