Ezt elmagyarázná valaki? C++
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?
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.
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.
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!