Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3
Wiki Markup
h2. Ylikuormitus

C+\+ tarjoaa ohjelmoijalle mahdollisuuden ylikuormittaa funktioita. Tällä tarkoitetaan sitä, että voi olla samannimisiä funktioita, jotka eroavat parametrien lukumäärässä. Kutsuttava funktio tunnistetaan parametrien tyypistä. Muodostimien kanssa käytetään usein ylikuormitusta.
{note}Palautustyyppiä ei voi ylikuormittaa.{note}
!ylikuormitus.png|border=1!\\
h3. Esimerkki 1. Funktioiden ylikuormitus.

.h:
{code}
class CElain
{
private:   // saatavissa vain luokan metodeilla
    char m_Nimi[100];
    float m_Massa;

public:   // voidaan käyttää luokan ulkopuolelta
    bool AsetaTiedot(char Nimi[], float Massa);   // 'Alkuperäinen metodi'
    bool AsetaTiedot(char Nimi[]);                // 1. Ylikirjoitettu funktio
    bool AsetaTiedot(float Massa);                // 2. ylikirjoitettu funktio
};
{code}
.cpp:
{code}
bool CElain::AsetaTiedot(char Nimi[], float Massa)
{
    printf("AsetaTiedot(char[], float)\n");
    AsetaTiedot(Nimi);
    AsetaTiedot(Massa);
    return true;
}

bool CElain::AsetaTiedot(char Nimi[])
{
    printf("AsetaTiedot(char[])\n");
    strcpy(m_Nimi, Nimi);
    return true;
}

bool CElain::AsetaTiedot(float Massa)
{
    printf("AsetaTiedot(float)\n");
    m_Massa = Massa;
    return true;
}
{code}
main:
{code}
int main()
{
    CElain kissa;

    kissa.AsetaTiedot("Miuku", 2.4);   // kutsuu metodia AsetaTiedot(char Nimi[], float Massa)
    kissa.AsetaTiedot("Mauku");        // kutsuu metodia AsetaTiedot(char Nimi[])
    kissa.AsetaTiedot(2.4);            // kutsuu metodia AsetaTiedot(float Massa)
}
{code}