CodeBlanks Logo Icon CodeBlanks

Member initializer list

Member initializer list ile verimli başlatma öğrenirsin.

Member initializer list

C++'ta üye değişkenleri başlatmanın daha verimli yolu member initializer list'tir. Yapıcı metodun parametre parantezinden sonra iki nokta konur, ardından her üye üye(değer) biçiminde yazılır.

Örnek: Player(std::string n, int l) : name(n), level(l) { }. Burada name(n) name üyesini n değeriyle başlatır; atama yapmaz. Atama yapıcı gövdesinde olsaydı önce üye varsayılan kurulur sonra üzerine yazılırdı. Başlatma listesi bu çifte işi ortadan kaldırır; özellikle const ve başvuru üyeler için zorunludur.

Başlatma sırası

Üyeler başlatma listesinde yazıldıkları sırada değil, sınıf içinde tanımlandıkları sırada başlatılır. Yani : level(l), name(n) yazsan da önce name sonra level kurulur. Sırayı sınıf tanımına göre tutmak, uyarıları önler.

Listede bir üye başka bir üyeyi kullanıyorsa sıra önem kazanır. Örnek: : name(n), level(name.length()). Eğer level name'den önce tanımlıysa, level henüz başlatılmamış name'i kullanmaya çalışır. Bu yüzden bağımlı başlatmalarda üye tanım sırasını dikkatli düşün.

Uygulama Player sınıfına başlatma listesi ekle

Player sınıfını tanımla. public: altına std::string name; ve int level; üye değişkenlerini ekle. Player(std::string n, int l) : name(n), level(l) { } yapıcı metodunu başlatma listesiyle yaz. main içinde Player p("Ayşe", 5); oluştur ve std::cout ile name'i yazdır.

Başlangıç kodu

main.cpp
#include <iostream>
#include <string>

// Player sınıfını tanımla

int main() {
    // Player örneğini başlatma listesiyle oluştur ve name yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <string>

class Player {
public:
    std::string name;
    int level;
    Player(std::string n, int l) : name(n), level(l) {
    }
};

int main() {
    Player p("Ayşe", 5);
    std::cout << p.name;
    return 0;
}

Beklenen çıktı

Ayşe

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Parçayı rolüne eşle

Kavram Anlamı
: name(n) name üyesini başlatır
name(n), level(l) virgülle ayrılmış liste
{ } yapıcı gövdesi
Player(std::string n, int l) parametre listesi

2 İki noktayı yaz

Soru
Player(std::string n) ____ name(n) { }
Cevap
Player(std::string n) : name(n) { }

Açıklama: İki nokta başlatma listesini başlatır.

3 Aşağıdaki başlatma listelerinden hangisi doğrudur?

main.cpp
Player(std::string n, int l)
  • Player(std::string n, int l) { name(n), level(l) }
  • Player(std::string n, int l) : name(n) level(l) { }
  • Player(std::string n, int l) = name(n), level(l);
  • Player(std::string n, int l) : name(n), level(l) { } Doğru cevap

Açıklama: İki nokta, virgülle ayrılmış üyeler ve gövde doğru sırada.

Orta seviye bölümündeki tüm dersler