Kezdőoldal » Számítástechnika » Programozás » Van pár dolog amit nem értek...

Van pár dolog amit nem értek c/c++-ban. Mit jelentenek ezek? (többi lent)

Figyelt kérdés

- 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?


2018. jan. 26. 14:15
 1/6 anonim ***** válasza:

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.

2018. jan. 26. 16:10
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:
megint én vagyok. a 3-adra még annyit, hogy ha visszaadsz egy ideiglenes változót, de nem érték szerint, akkor ott később memóriaszemét lesz/lehet, mert a függvény után megszűnik a változó is. Ennek örömére egy normális operációs rendszer lelőné a programot.
2018. jan. 26. 16:12
Hasznos számodra ez a válasz?
 3/6 anonim ***** válasza:
100%

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

2018. jan. 26. 17:41
Hasznos számodra ez a válasz?
 4/6 anonim ***** válasza:
100%

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

2018. jan. 26. 17:41
Hasznos számodra ez a válasz?
 5/6 anonim ***** válasza:
A nem pont ugyan abban a pillanatban küldtük volna el a két választ, azt hinné az ember hogy lekoppintottam :))
2018. jan. 26. 17:46
Hasznos számodra ez a válasz?
 6/6 sharkxxx ***** válasza:

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.

2018. jan. 26. 18:30
Hasznos számodra ez a válasz?

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!