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 |