Toiminnot#

Johdanto#

Funktiot ovat C+±ohjelmoinnin peruskomponentti. Ne pakkaavat koodinpätkiä uudelleenkäytettäviksi ja tehokkaiksi koodiosiksi, jotka on suunniteltu suorittamaan tietty tehtävä. Funktioita voidaan kutsua useita kertoja ohjelman sisällä, mikä helpottaa koodin järjestämistä ja auttaa välttämään koodin toistamista. Funktiot myös helpottavat koodin virheenkorjausta.

Tämä sivu käsittelee C++:n funktioiden käytön perusteita, mukaan lukien:

Funktion rakenne ja syntaksi#

C++:ssa funktiot on esitettävä paluuarvotyypillä, nimellä ja parametreilla. Perussyntaksi on:

return_type function_name(parameters) {
  // Code to execute when the function is called
  return result;  // Optional, used to return a value
}

Toiminto-osat

Kuvaus

return_type

Funktion palauttama tietotyyppi. Joitakin yleisiä asetuksia ovat:

  • void — Ei palauta mitään
  • int — Palauttaa kokonaisluvun
  • double — Palauttaa liukulukun
  • bool — Palauttaa true tai false
  • char — Palauttaa yhden merkin
  • const char* — Palauttaa tekstimerkkijonon
  • käyttäjän määrittämät tyypit — Palauttaa struct tai luokkaobjektin

function_name

Funktion nimi.

parameters

Valinnainen. Pilkuilla erotettu luettelo tyypitetyistä parametreista, jotka on kirjoitettu muodossa type name, jossa type määrittää parametrin tietotyypin ja name on tunniste, jota käytetään kyseisen arvon käyttämiseen funktion sisällä. Parametrit saavat syöttöarvot, kun funktiota kutsutaan.

result

Valinnainen. Funktion palauttama arvo. Jos funktion return_type ei ole void , tämä arvo on annettava ja sen tyypin on vastattava täsmälleen määritettyä return_type

Note: A function must always be declared before it is called, or you must provide a function prototype.

Toimintoprototyypit#

C++:ssa koodia luetaan ylhäältä alas. Tämä tarkoittaa, että kääntäjän on tunnettava funktio ennen kuin sitä voidaan kutsua.

Funktioprototyypin avulla voit käyttää funktiota ennen sen koko koodin kirjoittamista. Tämä mahdollistaa main() pitämisen ohjelman alussa ja funktiomääritelmien sijoittamisen myöhemmin, missä ne on helpompi järjestää ja lukea.

Ilman prototyyppiä sinun pitäisi määritellä jokainen funktio, jonka arvo on main(), mikä voi vaikeuttaa projektien seuraamista niiden kasvaessa.

// The function's prototype
void greeting();

int main() {
  greeting();
}

// Write the function's body after
void greeting() {
  Brain.Screen.print("Hello!");
}

Funktioiden määrittely ja kutsuminen#

Functions with No Parameters#

Jos funktio ei vaadi syötettä, voit määritellä sen ilman parametreja. Käytä paluutyyppinä void jos funktio ei palauta arvoa.

// Define a function to display a message
void greeting() {
    Brain.Screen.print("Hello!");
}

int main() {
    // Initializing Robot Configuration. DO NOT REMOVE!
    vexcodeInit();
    // Call the function to display the message
    greeting();
}

Functions with Parameters#

Voit myös lisätä funktioihin parametreja, joiden avulla voit välittää tietoja funktion käytettäväksi.

Huomautus: Tekstiä voidaan välittää käyttämällä C-tyylisiä merkkijonoja (const char*) tai C+±merkkijonoja (std::string).

// Define a function with a parameter
void namedGreeting(const char* name) {
    Brain.Screen.print("Hello, %s!", name);
}

int main() {
    // Initializing Robot Configuration. DO NOT REMOVE!
    vexcodeInit();
    namedGreeting("Stranger");
}

Paluuarvot#

Funktiot voivat lähettää dataa takaisin kutsujalle käyttämällä avainsanaa return Näin voit tallentaa ja käyttää tulostetta projektissasi.

// Define a function that multiplies numbers by 2
int timesTwo(int number) {
    return number * 2;
}

int main() {
    // Initializing Robot Configuration. DO NOT REMOVE!
    vexcodeInit();
    // Display the return value
    Brain.Screen.print("%d", timesTwo(2));
}

Viittauksen ohittaminen#

Oletusarvoisesti C++ välittää funktion parametrit arvon mukaan, mikä tarkoittaa, että funktio saa kopion alkuperäisestä muuttujan arvosta. Funktion sisällä tehdyt muutokset eivät vaikuta alkuperäiseen arvoon.

// Add 1 to the number
void addOne(int number) {
  number++;
}

int main() {
  int value = 5;
  addOne(value);
  // "value" will still be 5
}

Jotta funktio voisi muokata alkuperäistä muuttujaa, parametrit voidaan välittää viittauksella käyttämällä symboleja &.

// Add 1 to the number
void addOne(int& number) {
  number++;
}

int main() {
  int value = 5;
  addOne(value);
  // "value" will now be 6
}

Viittauksen kautta välittäminen sallii funktioiden päivittää funktion ulkopuolella määriteltyjä muuttujia palauttamatta arvoa.

Takaisinkutsufunktiot#

Takaisinkutsufunktio on funktio, joka välitetään toiselle funktiolle ja jota kutsutaan automaattisesti tietyn tapahtuman sattuessa.

Takaisinkutsuja käytetään yleisesti tapahtumiin, kuten painikkeiden painalluksiin tai anturipäivityksiin.

Sen sijaan, että funktiota kutsuttaisiin itse, projekti kutsuu sitä puolestasi, kun tapahtuma tapahtuu.

void onPressed() {
  Brain.Screen.print("Screen pressed!");
}

// Call onPressed whenever the screen is pressed
int main() {
  vexcodeInit();
  Brain.Screen.pressed(onPressed);
}

Callback Signatures#

Jokaisen takaisinkutsufunktion on seurattava tiettyä allekirjoitusta, joka määrittelee:

  • Paluutyyppi

  • Parametrien lukumäärä

  • Parametrityypit

Vaadittu allekirjoitus määräytyy API:n mukaan. Takaisinkutsufunktion on vastattava tätä allekirjoitusta täsmälleen.

// 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);

Parametrien nimet ovat kuvailevia ja voivat vaihdella, mutta paluuarvon tyypin, parametrien järjestyksen ja parametrityyppien on oltava täsmälleen samat.

Funktiot, joissa on oletusargumentit#

Funktiot voivat määrittää oletusarvot yhdelle tai useammalle parametrille. Oletusargumenttia käytetään, kun kyseiselle parametrille ei anneta arvoa funktiota kutsuttaessa.

Oletusargumenttien säännöt:

  • Oletusarvoisten argumenttien täytyy olla funktion määritelmän viimeiset parametrit.

  • Kun parametrilla on oletusarvo, kaikilla sen jälkeisillä parametreilla on myös oltava oletusarvot.

  • Jos funktio määrittää oletusarvoargumentit prototype-muuttujassaan, näitä oletusarvoja ei saa määrittää uudelleen funktion määritelmässä.

// 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 (V5) and
    // use default value for repeatCount (1)
    greeting("V5");

    Brain.Screen.newLine();

    // Overrides the default value to 3
    greeting("V5", 3);
}