const-jäsenfunktiot
Merkitse vain lukuun tarkoitetut metodit
const-jäsenfunktiot on ilmainen C++ Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/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.
Mikä on const-jäsenfunktio
const-määreellä merkitty jäsenfunktio lupaa olla muuttamatta olion havaittavaa tilaa. Avainsana sijoitetaan parametriluettelon jälkeen.
#include <iostream>
class Counter {
int n = 0;
public:
int value() const { return n; } // read-only
void inc() { ++n; }
};
int main() {
Counter c;
c.inc();
std::cout << c.value() << "\n";
}const-oliot kutsuvat const-metodeja
const-oliolle voi kutsua vain const-jäsenfunktioita. Ei-const-metodien kutsuminen on kielletty.
#include <iostream>
class Counter {
int n = 0;
public:
int value() const { return n; }
void inc() { ++n; }
};
int main() {
const Counter c;
std::cout << c.value() << "\n"; // OK
// c.inc(); // ERROR
}this muuttuu const-osoittimeksi
Const-jäsenfunktion sisällä this on osoitin const-arvoon, joten kääntäjä hylkää kaikki yritykset muuttaa jäseniä.
Merkitkää kaikki vain lukevat metodit const-määreellä
Getterien, kyselyfunktioiden ja tulostusfunktioiden tulisi kaikkien olla const-funktioita. Näin ne toimivat const-olioiden ja const-viitteiden kanssa.
const-ylikuormitus
Metodista voi tarjota sekä const- että ei-const-version; kääntäjä valitsee version sen perusteella, onko olio const.
#include <iostream>
#include <vector>
class Box {
std::vector<int> v{1, 2, 3};
public:
int& at(int i) { return v[i]; } // mutable access
const int& at(int i) const { return v[i]; } // read-only access
};
int main() {
Box b;
b.at(0) = 99;
std::cout << b.at(0) << "\n";
}mutable-avainsana
mutable-jäsenet voivat muuttua myös const-metodin sisällä — tämä on hyödyllistä välimuisteille tai laskureille, jotka eivät kuulu loogiseen tilaan.
#include <iostream>
class Cache {
mutable int hits = 0;
int data = 42;
public:
int get() const { ++hits; return data; } // hits is mutable
int hitCount() const { return hits; }
};
int main() {
Cache c;
c.get(); c.get();
std::cout << c.hitCount() << "\n";
}Looginen ja fyysinen const
const suojaa olion loogista tilaa; mutable sallii toteutuksen yksityiskohtien, kuten välimuistien, muuttua rikkomatta tätä lupausta.
const-metodit ja const-viitteet
const&-parametrin vastaanottava funktio voi kutsua sen kautta vain const-metodeja — tämä on yksi syy merkitä kyselyfunktiot const-funktioiksi.
#include <iostream>
class Counter {
int n = 5;
public:
int value() const { return n; }
};
void report(const Counter& c) {
std::cout << c.value() << "\n"; // needs value() to be const
}
int main() { Counter c; report(c); }const-viitteiden palauttaminen
Const-aksessorit palauttavat usein const&-viitteen, jotta jäsenet voidaan tuoda saataville ilman, että niitä voi muuttaa tai kopioida.
Älkää poistako const-määrettä valumuunnoksella
const_cast-muunnoksen käyttäminen aidosti const-olion muuttamiseen johtaa määrittelemättömään toimintaan. Käyttäkää sen sijaan mutable-määrettä oikeutettuihin poikkeuksiin.
const-oikeelliset luokat
Hyvin suunnitellussa luokassa kaikki tilaa muuttamattomat metodit merkitään const-määreellä, joten luokka toimii saumattomasti const-konteksteissa kaikkialla ohjelmassa.
Pikatarkistus
Testatkaa, miten hyvin ymmärrätte const-jäsenfunktioita.
Kertaus
Opitte merkitsemään vain lukevat metodit const-määreellä, että const-oliot kutsuvat vain const-metodeja, miten const-määreen perusteella voidaan ylikuormittaa sekä miten mutable sallii toteutuksen yksityiskohtien muuttamisen. Välttäkää const_cast-muunnosta ja suunnitelkaa luokat const-oikeellisiksi heti alusta alkaen.
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 ”const-jäsenfunktiot” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa C++ Academy-oppimispolun 3 oppituntia, myös oppitunnin “const-jäsenfunktiot”. 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 ”const-jäsenfunktiot”?
Merkitse vain lukuun tarkoitetut metodit 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 2/4.
Kuinka kauan ”const-jäsenfunktiot”-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
- const-muuttujat ja -parametrit
- const-jäsenfunktiot
- constexpr ja käännösaika
- consteval ja constinit