Member initializer list
- C++ kursu
- Orta seviye
- Ders 9/116
- 5 dk
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
#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
#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
Player(std::string n) ____ name(n) { }
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?
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.