C++ Academy · Oppitunti

struct ja class: milloin käyttää kumpaakin

Ymmärrä struct- ja class-rakenteiden ainoa todellinen ero ja noudata vakiintuneita käytäntöjä.

Oppitunti 1/413 vaihetta

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 public

class: 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 inheritance

Sekalaiset 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.

Aloita maksutta

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

  1. struct ja class: milloin käyttää kumpaakin
  2. Jäsenmuuttujat ja metodit
  3. Konstruktorit ja jäsenen alustuslistat
  4. this-pointteri ja kapselointi
← Takaisin: C++ Academy