Kezdőoldal » Számítástechnika » Programozás » Ezt elmagyarázná valaki? C++

Ezt elmagyarázná valaki? C++

Figyelt kérdés

A két függvény miben különbözik?

1. SIMPLECAT FunctionOne(SIMPLECAT TheCat);

2. SIMPLECAT *FunctionTwo(SIMPLECAT *TheCat);


Az első az érték szerinti paraméterátadás.

A második pedig cím szerint paraméterátadás.


Mi az amit nem értek:

Azt nem értem,hogy a második függvényben a függvény neve előtt miért van * jel?

Amikor elveszem onnan a * jelet akkor azt tapasztaltam,hogy a függvény nem tudott visszaadni memóriacímet például return TheCat. Ilyenkor csak így volt jó return *TheCat. Miért van így?


De ha a függvény neve előtt is szerepel egy * jel akkor már igen jó volt így is: return TheCat.Miért?


//main.cpp

# include <iostream> //std függvénykönyvtár

# include <stdlib.h> //return EXIT_SUCCESS

# include <windows.h> //Sleep(500),exit(0)


typedef unsigned short ushort;

typedef unsigned int uint;


using std::cout;

using std::cin;

using std::endl;


class SIMPLECAT

{

public:

SIMPLECAT(); //Konstruktor

SIMPLECAT(SIMPLECAT&); //Másoló konstruktor

~SIMPLECAT(); //Destruktor

};


SIMPLECAT::SIMPLECAT()

{cout <<"Konstruktor \n";}


SIMPLECAT::SIMPLECAT(SIMPLECAT&)

{cout <<"Copy konstruktor \n";}


SIMPLECAT::~SIMPLECAT()

{cout <<"Destruktor \n";}


SIMPLECAT FunctionOne(SIMPLECAT TheCat);

SIMPLECAT *FunctionTwo(SIMPLECAT *TheCat); /*Ha innen elveszem a csillagot a FunctionTwo elől akkor csak így fogom tudni visszaadni : return *TheCat.

De ha otthagyom akkor csak így jó return TheCat


int main()

{

cout <<"Making a cat \n";

SIMPLECAT Frisky;

cout <<"\nCalling FunctionOne \n";

FunctionOne(Frisky);

cout <<"\nCalling FunctionTwo: \n";

FunctionTwo(&Frisky);


cin.get();

return EXIT_SUCCESS;

}


SIMPLECAT FunctionOne(SIMPLECAT TheCat)

{cout <<"FunctionOne returning \n";return TheCat;}


SIMPLECAT *FunctionTwo(SIMPLECAT *TheCat)

{cout <<"FunctionTwo returning \n";return TheCat;}


Ha egy függvényből a return utasítással egy memóriacímet akarok vissza adni akkor kell a függvény neve elé a csillag?


Ha pedig az értékét akarom átadni akkor pedig nem kell csillag mert akkor érték szerint történik ugye?


De akkor ez mi SIMPLECAT *FunctionTwo(SIMPLECAT *TheCat)

Itt a SIMPLECAT típus neve egy mutató? :O Miért?Hogy van ez az egész?


2012. jan. 28. 18:41
 1/3 iostream ***** válasza:

A függvény deklarációja három részből áll:

<visszatérési érték> <függvénynév>(<paraméterlista>);


SIMPLECAT *FunctionTwo(SIMPLECAT *TheCat);

Itt a visszatérési érték a SIMPLECAT* típus. A * a visszatérési értékhez tartozik, hiszen a függvénynévben nem lehetséges csillag.

2012. jan. 28. 18:49
Hasznos számodra ez a válasz?
 2/3 A kérdező kommentje:
Fúú kösz :D már értem
2012. jan. 28. 18:52
 3/3 iostream ***** válasza:

Még valami. Ez az egész onnan jön, már hogy a * gyakran nem a típusnévhez van csapva, hogy bár a * LOGIKAILAG a típus része, SZEMANTIKAILAG egy módosító, és ha leírsz egy ilyet, hogy

int* x, y;

akkor csak az x lesz pointer, az y nem.


Ez inkább C-s jelölés, C++-ban úgy szokás, hogy a típus mellé írjuk a módosítót (*, &). Mindkettő logikus a maga nemében.

2012. jan. 28. 19:49
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!