struct ja class: milloin käyttää kumpaakin
Ymmärrä struct- ja class-rakenteiden ainoa todellinen ero ja noudata vakiintuneita käytäntöjä.
struct ja class: milloin käyttää kumpaakin on ilmainen C++ Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/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.
Sama mekanismi, eri oletukset
C++:ssa struct ja class ovat lähes identtisiä. Ainoa kielitasoinen ero on oletusarvoinen käyttöoikeusmääre.
struct: julkinen oletusarvoisesti
struct-tyypissä jäsenet ovat julkisia, ellei toisin määritetä.
struct Point {
int x;
int y;
}; // x and y are publicclass: yksityinen oletusarvoisesti
class-tyypissä jäsenet ovat yksityisiä, ellei niitä määritetä julkisiksi.
class Counter {
int n_ = 0; // private
public:
void increment() { n_++; }
int value() const { return n_; }
};Käytäntö, ei vain syntaksi
C++-yhteisö käyttää näitä kahta avainsanaa ilmaisemaan tarkoitusta:
struct— passiivinen data (POD-tyyppinen, kaikki jäsenet julkisia)class— kapseloitu toiminta (yksityinen tila ja julkinen rajapinta)
Milloin struct-tyyppiä käytetään
Käyttäkää struct-tyyppiä yksinkertaisille tietokoosteille, kuten koordinaateille, RGB-väreille ja yksinkertaisille tietueille.
struct Point { int x; int y; };
struct Color { unsigned char r, g, b, a; };
struct Person { std::string name; int age; };Milloin class-tyyppiä käytetään
Käyttäkää class-tyyppiä, kun suojattavana on invariantteja, tila muuttuu metodien kautta tai tarvitaan kapselointia.
class BankAccount {
double balance_ = 0.0; // protected invariant
public:
void deposit(double amount);
bool withdraw(double amount);
double balance() const;
};Koosteen alustus
Rakenteet, joiden kaikki jäsenet ovat julkisia, voidaan alustaa aaltosuljesyntaksilla luettelemalla arvot esittelyjärjestyksessä.
struct Point { int x; int y; };
Point p1{3, 4}; // aggregate init
Point p2{.x = 3, .y = 4}; // designated init (C++20)Myös periytyminen eroaa
Periytyminen on struct-tyypissä oletusarvoisesti julkista ja class-tyypissä yksityistä. Määritelkää käyttöoikeus eksplisiittisesti, jos olette epävarmoja.
class B {};
struct D1 : B {}; // public inheritance
class D2 : B {}; // private inheritanceSekalaiset jäsenet
Oletusten eroista huolimatta molemmissa avainsanoissa voidaan käyttää public-, private- ja protected-osioita.
struct Config {
private:
int internalCount = 0;
public:
std::string name;
void incrementCount() { ++internalCount; }
};Koodin tulkitseminen avainsanan perusteella
Kun näette struct-avainsanan, odottakaa tietokenttiä. Kun näette class-avainsanan, odottakaa kapseloitua logiikkaa. Tulkitkaa avainsana vihjeeksi tekijän tarkoituksesta.
Tyyliohjeet
Useimmat tyyliohjeet (Google, LLVM, ISO C++ Core) suosittelevat struct-tyyppiä vain passiivisille tietokoosteille, joilla ei ole invariantteja. Kaikesta epätriviaalin toiminnan sisältävästä tulee class-tyyppi.
Pikatarkistus
Mikä on ainoa kielitasoinen ero struct- ja class-tyyppien välillä C++:ssa?
Yhteenveto
Käyttäkää struct-tyyppiä yksinkertaisille tietokoosteille ja class-tyyppiä tyypeille, joilla on invariantteja ja toimintaa. Ainoa kielitason ero on oletusarvoinen käyttöoikeus — mutta käytännössä näitä käsitellään hyvin eri tavoin.
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 ”struct ja class: milloin käyttää kumpaakin” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa C++ Academy-oppimispolun 3 oppituntia, myös oppitunnin “struct ja class: milloin käyttää kumpaakin”. 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 ”struct ja class: milloin käyttää kumpaakin”?
Ymmärrä struct- ja class-rakenteiden ainoa todellinen ero ja noudata vakiintuneita käytäntöjä. 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 1/4.
Kuinka kauan ”struct ja class: milloin käyttää kumpaakin”-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
- struct ja class: milloin käyttää kumpaakin
- Jäsenmuuttujat ja metodit
- Konstruktorit ja jäsenen alustuslistat
- this-pointteri ja kapselointi