0Pricing
C++ Academy · Lekcja

Konstruktory i listy inicjalizacyjne składowych

Czytelnie inicjalizuj składowe za pomocą list inicjalizacyjnych składowych

Konstruktory i listy inicjalizacyjne składowych to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C++ Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C++ Academy zawiera 4 lekcji w sumie.

Czym jest konstruktor

Konstruktor to specjalna metoda uruchamiana podczas tworzenia obiektu. Ma taką samą nazwę jak klasa i nie ma typu zwracanego.

class Point {
public:
    Point() {              // default constructor
        x_ = 0;
        y_ = 0;
    }
private:
    int x_, y_;
};

Konstruktory sparametryzowane

Konstruktory mogą przyjmować parametry i można zdefiniować kilka ich przeciążeń.

class Point {
    int x_, y_;
public:
    Point() : x_(0), y_(0) {}
    Point(int x, int y) : x_(x), y_(y) {}
};

Listy inicjalizatorów składowych

Składnia : member(value) przed treścią konstruktora to lista inicjalizatorów składowych. Składowe są inicjalizowane tutaj — a nie przypisywane później w treści konstruktora.

class Person {
    std::string name_;
    int age_;
public:
    Person(std::string n, int a) : name_(std::move(n)), age_(a) {}
};

Po co używać list inicjalizacyjnych

Składowe są konstruowane dokładnie raz, z właściwą wartością. Bez listy są konstruowane domyślnie, a następnie przypisywane — jest to nieefektywne w przypadku typów nietrywialnych.

Kolejność inicjalizacji

Składowe są inicjalizowane w kolejności, w jakiej zadeklarowano je w klasie — nie w kolejności z listy inicjalizacyjnej. Zachowaj tę samą kolejność, aby uniknąć nieporozumień.

Domyślne inicjalizatory w klasie (C++11)

Można nadać składowym wartości domyślne bezpośrednio w treści klasy. Jest to przydatne, gdy większość konstruktorów korzysta z tych samych wartości domyślnych.

class Buffer {
    size_t size_ = 0;
    char* data_ = nullptr;
public:
    Buffer() = default;
    Buffer(size_t n) : size_(n), data_(new char[n]) {}
};

= default i = delete

Można polecić kompilatorowi dostarczenie specjalnej funkcji składowej albo jej usunięcie:

class Widget {
public:
    Widget() = default;          // compiler-generated default
    Widget(const Widget&) = delete;  // disable copy
};

Konstruktory delegujące (C++11)

Konstruktor może wywołać inny konstruktor tej samej klasy, aby współdzielić logikę inicjalizacji.

class Box {
    int w_, h_, d_;
public:
    Box(int w, int h, int d) : w_(w), h_(h), d_(d) {}
    Box() : Box(1, 1, 1) {}      // delegates to the 3-arg ctor
};

Jawne konstruktory

Konstruktory jednoargumentowe mogą być używane w konwersjach niejawnych. Oznacz je jako explicit, aby zapobiec nieoczekiwanym konwersjom.

class Vector {
public:
    explicit Vector(size_t n);
};
Vector v = 10;          // ERROR: explicit prevents this
Vector v(10);            // OK

Destruktory

Destruktor ~ClassName() jest wykonywany, gdy obiekt zostaje zniszczony. Używaj go do zwalniania zasobów, takich jak pliki, gniazda i pamięć surowa.

Reguła pięciu (zajawka)

Jeśli definiujesz dowolną ze specjalnych funkcji składowych — destruktor, konstruktor kopiujący, operator przypisania kopiującego, konstruktor przenoszący lub operator przypisania przenoszącego — weź pod uwagę wszystkie pięć. Temat ten omówiono w kursie o semantyce przenoszenia.

Szybkie sprawdzenie

Co określa kolejność inicjalizacji składowych klasy?

Podsumowanie

Używaj konstruktorów do ustalania stanu obiektu. Preferuj listy inicjalizacyjne składowych zamiast przypisań w treści konstruktora. Oznaczaj konstruktory jednoargumentowe jako explicit i używaj = default / = delete, aby wyrażać intencje.

Często zadawane pytania

Czy lekcja „Konstruktory i listy inicjalizacyjne składowych” jest bezpłatna?

Tak — pełny tekst „Konstruktory i listy inicjalizacyjne składowych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C++ Academy, przejdź na CoddyKit PRO. Kurs C++ Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Konstruktory i listy inicjalizacyjne składowych”?

Czytelnie inicjalizuj składowe za pomocą list inicjalizacyjnych składowych Ćwiczysz C++ Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C++ Academy?

Nie wymagamy żadnego doświadczenia. C++ Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Konstruktory i listy inicjalizacyjne składowych”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C++ Academy?

Tak. Każda lekcja C++ Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. struct a class — kiedy używać którego
  2. Zmienne składowe i metody
  3. Konstruktory i listy inicjalizacyjne składowych
  4. Wskaźnik this i enkapsulacja
← Powrót do C++ Academy