Sobes.tech
Junior

Mis on meetodite ülekoormamine ja ülekirjutamine C++-s?

sobes.tech AI

Vastus AI-lt

Meetodite ülekoormamine (Method Overloading):

  • Võimaldab omada mitu meetodit sama nimega ühes klassis.
  • Erinevad on signatuuri (parameetrite arv ja/või tüübid).
  • Tagastustüüp ei osale signatuuri määratlemisel ülekoormamisel.
  • Konkreetne meetod valitakse kompilaatori poolt argumentide tüüpide põhjal kutsumise ajal (staatiline sidumine).
class MyClass {
public:
    void print(int a) {
        // Täisarvu printimine
    }

    void print(double d) {
        // Murdarvu printimine
    }

    void print(int a, int b) {
        // Kaks täisarvu printimine
    }
};

Meetodite ülekoormamine (Method Overloading):

  • Annab pärilikklassile võimaluse pakkuda spetsiifilist meetodi rakendust, mis on juba määratletud baasklassis.
  • Pärilikklassis peab meetod omama sama signatuuri (nimi, parameetrite arv ja tüübid) ning sama tagastustüüpi (või kovariantiivset tüüpi).
  • Kasutatakse virtuaalsete funktsioonidega (virtual) polümorfismi teostamiseks.
  • Konkreetne rakendus valitakse jooksvalt (dünaamiline sidumine), sõltuvalt objekti tegelikust tüübist.
class Base {
public:
    virtual void display() {
        // Baasklass
    }
};

class Derived : public Base {
public:
    void display() override { // `override` sõna (alates C++11-st) aitab vältida vigu
        // Spetsiifiline rakendus pärandklassis
    }
};

Peamised erinevused:

Omadus Meetodite ülekoormamine Meetodite ülekirjutamine
Kasutuskoht Ühes klassis Pärand- ja pärandklassides
Meetodi nimi Sama Sama
Signatuur Erinev Sama
Valiku mehhanism Statiline sidumine (kompileerimine) Dünaamiline sidumine (jooksul)
Kasutamine Tavalised funktsioonid Virtuaalsed funktsioonid
Eesmärk Erinevad tegevused erinevatel tüüpidel Spetsiifiline rakendus pärandamisel