Funkciók#
Bevezetés#
A függvények a C++ programozás alapvető elemei, amelyek a kódrészleteket újrafelhasználható, hatékony kódrészletekbe csomagolják, és egy adott feladat végrehajtására szolgálnak. A függvények többször is meghívhatók egy programon belül, ami megkönnyíti a kód rendszerezését és segít elkerülni az ismétlődő kódot. A függvények a kód hibakeresését is megkönnyítik.
Ez az oldal a C++ függvények használatának alapjait tárgyalja, beleértve a következőket:
Függvénystruktúra és szintaxis — Hogyan íródnak a függvények C+±ban, beleértve a visszatérési típusokat, neveket és paramétereket.
Függvényprototípusok — Mik a prototípusfüggvények és miért használják őket.
Függvények definiálása és meghívása — Hogyan hozhatsz létre függvényeket és hívhatod meg őket a programodból.
Visszatérési értékek — Hogyan küldhetnek vissza adatokat a függvények a hívónak.
Referencia szerinti átadás — Hogyan módosíthatják a függvények a változókat a saját hatókörükön kívül.
Visszahívási függvények — Hogyan adhatunk át függvényeket más függvényeknek, és hogyan hívhatjuk meg őket automatikusan eseményekre válaszul.
Függvények alapértelmezett argumentumokkal — Hogyan adhatunk alapértelmezett értékeket a paramétereknek, ha nincs megadva argumentum.
Függvénystruktúra és szintaxis#
A C+±ban a függvényeket a visszatérési típusukkal, nevükkel és paramétereikkel kell deklarálni. Az alapvető szintaxis a következő:
return_type function_name(parameters) {
// Code to execute when the function is called
return result; // Optional, used to return a value
}
Funkció részei |
Leírás |
|---|---|
|
A függvény által visszaadott adattípus, néhány gyakori beállítási lehetőség:
|
|
A függvény neve. |
|
Opcionális. Tipikus paraméterek vesszővel elválasztott listája, |
|
Opcionális. A függvény által visszaadott érték. Ha a függvény |
Megjegyzés: Egy függvényt *mindig deklarálni kell a meghívása előtt, vagy meg kell adni egy függvény prototípust.
Funkcióprototípusok#
A C+±ban a kódot felülről lefelé olvassuk. Ez azt jelenti, hogy a függvényt ismernie kell a fordítónak, mielőtt meghívható lenne.
Egy függvényprototípus lehetővé teszi egy függvény felhasználását a teljes kód megírása előtt. Ez lehetővé teszi, hogy main() függvényeket a program tetején tartsuk, miközben a függvénydefiníciókat későbbre, könnyebben rendszerezhetővé és olvashatóvá tegyük.
Prototípus nélkül minden main()feletti függvényt definiálni kellene, ami megnehezítheti a projektek követését a növekedésük során.
Definiáljuk a függvény prototípusát (
int main())// The function's prototype void greeting();Hívjuk meg a függvényt
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); greeting(); }Írd le a függvény törzsét a következő után:
void greeting() { Brain.Screen.print("Hello!"); }
Függvények definiálása és meghívása#
Functions with No Parameters#
Ha egy függvény nem igényel bemenetet, paraméterek nélkül is definiálhatod. Használj void visszatérési típust, ha a függvény nem ad vissza értéket.
Definiáld a függvényt (
int main())// Define a function to display a message void greeting() { Brain.Screen.print("Hello!"); }Hívjuk meg a függvényt
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Call the function to display the message greeting(); }
Functions with Parameters#
Paramétereket is hozzáadhatsz a függvényekhez, amelyek lehetővé teszik, hogy információkat adj meg a függvény számára.
Megjegyzés: A szöveg átadható C stílusú karakterláncokkal (const char*) vagy C++ stílusú karakterláncokkal (std::string).
Definiáld a függvényt (
int main())// Define a function with a parameter void namedGreeting(const char* name) { Brain.Screen.print("Hello, %s!", name); }Hívjuk meg a függvényt egy
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Call the function to display the message namedGreeting("Stranger"); }
Visszatérési értékek#
A függvények a return kulcsszó használatával küldhetnek adatokat a hívónak. Ez lehetővé teszi a kimenet rögzítését és felhasználását a projektben.
Definiáld a függvényt (
int main())// Define a function that multiplies numbers by 2 int timesTwo(int number) { return number * 2; }Hívjuk meg a függvényt egy
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Display the return value Brain.Screen.print("%d", timesTwo(2)); }
Áthaladás hivatkozással#
Alapértelmezés szerint a C++ érték szerint adja át a függvényparamétereket, ami azt jelenti, hogy a függvény az eredeti változó másolatát kapja meg. A függvényen belüli változtatások nem befolyásolják az eredeti értéket.
Definiáld a függvényt (
int main())// Add 1 to the number void addOne(int number) { number++; }Hívjuk meg a függvényt egy
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); int value = 5; addOne(value); // "value" will still be 5 }
Ahhoz, hogy egy függvény módosíthassa az eredeti változót, a paramétereket hivatkozással adhatjuk át az & szimbólum használatával.
Definiáld a függvényt (
int main())// Add 1 to the number void addOne(int& number) { number++; }Hívjuk meg a függvényt egy
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); int value = 5; addOne(value); // "value" will now be 6 }
A hivatkozáson keresztüli átadás lehetővé teszi a függvények számára, hogy a függvényen kívül definiált változók értéket adjanak vissza.
Visszahívó függvények#
A visszahívó függvény egy olyan függvény, amelyet átadunk egy másik függvénynek, és automatikusan meghívunk, amikor egy adott esemény bekövetkezik.
A visszahívásokat gyakran használják olyan eseményekhez, mint a gombnyomások vagy az érzékelők frissítései.
Ahelyett, hogy te magad hívnád meg a függvényt, a projekt hívja meg helyetted, amikor az esemény bekövetkezik.
Definiáljuk a visszahívó függvényt (
int main())// Create a callback function void onPressed() { Brain.Screen.print("Screen pressed!"); }Regisztrálja a visszahívást a
int main()függvényen belül.int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Call onPressed whenever the screen is pressed Brain.Screen.pressed(onPressed); }
Callback Signatures#
Minden visszahívó függvénynek egy adott aláírást kell követnie, amely meghatározza:
A visszatérési típus
A paraméterek száma
A paramétertípusok
A szükséges aláírást az API határozza meg. A visszahívó függvénynek pontosan meg kell egyeznie ezzel az aláírással.
// This callback function cannot include any parameters
void callback(void);
// This callback function includes four parameters
void callback(axisType axis, double x, double y, double z);
A paraméternevek leíró jellegűek és változhatnak, de a visszatérési típusnak, a paraméterek sorrendjének és típusának pontosan meg kell egyeznie.
Alapértelmezett argumentumokkal rendelkező függvények#
A függvények egy vagy több paraméterhez alapértelmezett értékeket definiálhatnak. Az alapértelmezett argumentumot akkor használjuk, ha a függvény meghívásakor az adott paraméterhez nincs megadva érték.
Alapértelmezett argumentumok szabályai:
Az alapértelmezett argumentumoknak a függvénydefinícióban az utolsó paramétereknek kell lenniük.
Ha egy paraméter alapértelmezett értéket kapott, akkor az azt követő összes paraméternek is alapértelmezett értékkel kell rendelkeznie.
Ha egy függvény alapértelmezett argumentumokat ad meg a prototype paraméterben, akkor ezeket az alapértelmezett értékeket nem szabad újra megadni a függvénydefinícióban.
Definiáld a függvényt (
int main())// Required parameter first, default parameter last void greeting(const char* name, int repeatCount = 1) { for (int i = 0; i < repeatCount; i++) { Brain.Screen.print("Hello, %s!", name); Brain.Screen.newLine(); } }Hívjuk meg a függvényt
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Say what name to greet (EXP) and // use default value for repeatCount (1) greeting("EXP"); Brain.Screen.newLine(); // Overrides the default value to 3 greeting("EXP", 3); }
// Required parameter first, default parameter last
void greeting(const char* name, int repeatCount = 1) {
for (int i = 0; i < repeatCount; i++) {
Brain.Screen.print("Hello, %s!", name);
Brain.Screen.newLine();
}
}
int main() {
vexcodeInit();
// Say what name to greet (EXP) and
// use default value for repeatCount (1)
greeting("EXP");
Brain.Screen.newLine();
// Overrides the default value to 3
greeting("EXP", 3);
}