Alaindeksi- ja funktiokutsuoperaattorit
Ylikuormita operaattorit [] ja (), jotta tyypit toimivat konttien tai kutsuttavien olioiden tavoin.
Alaindeksi- ja funktiokutsuoperaattorit on ilmainen C++ Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu C++ Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C++ Academy-kurssilla on yhteensä 4 oppituntia.
operator[] — indeksoitu käyttö
Ylikuormittakaa [], jotta tyyppiänne voidaan käyttää taulukon tavoin. Tämä on hyödyllistä säilöissä, matriiseissa ja kuvakuvauksissa.
class Vec {
std::vector<double> data_;
public:
double& operator[](size_t i) { return data_[i]; }
double operator[](size_t i) const { return data_[i]; }
};Kaksi ylikuormitusta: const ja ei-const
Tarjotkaa molemmat. Const-ilmentymää kutsuttaessa käytetään const-ylikuormitusta; ei-const-versio sallii sijoittamisen.
Raja-arvojen tarkistus
Tavallinen operator[] ei käytännössä tarkista rajoja. Tarjotkaa erillinen poikkeuksen heittävä at()-metodi standardikirjaston tapaan.
double& at(size_t i) {
if (i >= data_.size()) throw std::out_of_range("");
return data_[i];
}Moniulotteinen alaindeksi (C++23)
C++23 lisäsi pilkulla erotellun alaindeksin: m[i, j]. Aiemmissa versioissa tarvitaan funktiokutsu tai ketjutetut alaindeksit.
// C++23
double& operator[](size_t i, size_t j);
// Pre-C++23 workaround
double& operator()(size_t i, size_t j);operator() — funktiokutsu
Ylikuormittakaa (), jotta ilmentymiä voidaan kutsua. Tätä käytetään funktoriobjekteissa, matriisien indeksoinnissa ja määritettävissä predikaateissa.
struct Square {
int operator()(int x) const { return x * x; }
};
Square sq;
std::cout << sq(5); // 25Tilalliset funktoriobjektit
Funktiokutsuoperaattori toimii jäsenmuuttujien kanssa, jolloin tuloksena on tilallinen kutsuttava olio.
struct GreaterThan {
int threshold;
bool operator()(int x) const { return x > threshold; }
};
GreaterThan over10{10};
std::cout << over10(15); // trueKäyttö STL-algoritmien kanssa
Välittäkää funktioiden sijaan algoritmeille funktori-ilmentymiä.
std::vector<int> v = {1, 11, 2, 22};
auto it = std::find_if(v.begin(), v.end(), GreaterThan{10});Usean argumentin operaattorit
Sekä []-operaattori (ennen C++23:a) että ()-operaattori voidaan ylikuormittaa millä tahansa argumenttimäärällä. Ennen C++23:a () on matriisimaiseen käyttöön joustavampi valinta.
Viitteiden ja arvojen palauttaminen
Palauttakaa viite, jotta alaindeksin kautta voidaan sijoittaa arvoja. Vain luku -tyypeille palauttakaa arvo.
Proksioliot
Jos operator[]-operaattorin täytyy palauttaa monimutkainen olio, kuten bittikenttä, palauttakaa pieni proksiluokka, jolla on muunnos- ja sijoitusoperaattorit.
Käytännön esimerkkejä
Yleisiä käyttötapoja:
std::vector::operator[]std::map::operator[]— lisää puuttuvilla avaimilla- Matriisiluokat:
m(i, j) - Algoritmien funktoriobjektit
Pikatarkistus
Miten luokan ilmentymistä tehdään funktion tavoin kutsuttavia?
Kertaus
Ylikuormittakaa [] indeksoitua käyttöä varten ja tarjotkaa sekä const- että ei-const-ylikuormitus. Ylikuormittakaa (), jotta ilmentymiä voidaan kutsua — tämä on funktoriobjektien ja lambdojen perusta.
Opi C++ tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 51
- Oppitunnit
- 203
Usein kysytyt kysymykset
Onko oppitunti ”Alaindeksi- ja funktiokutsuoperaattorit” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa C++ Academy-oppimispolun 3 oppituntia, myös oppitunnin “Alaindeksi- ja funktiokutsuoperaattorit”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. C++ Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Alaindeksi- ja funktiokutsuoperaattorit”?
Ylikuormita operaattorit [] ja (), jotta tyypit toimivat konttien tai kutsuttavien olioiden tavoin. Harjoittelet C++ Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni C++ Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin C++ Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Alaindeksi- ja funktiokutsuoperaattorit”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä C++ Academy-oppitunnilla?
Kyllä. Jokainen C++ Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Aritmeettiset ja vertailuoperaattorit
- Virtojen sijoitus- ja poimintaoperaattorit
- Alaindeksi- ja funktiokutsuoperaattorit
- Kolmisuuntainen vertailuoperaattori C++20:ssa