C++
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.
Örnek çözümü göster
#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;
}
Kendini test et
-
Parçayı rolüne eşle
- : 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
-
İki noktayı yaz
Player(std::string n) ____ name(n) { }
Cevabı göster
Player(std::string n) : name(n) { }
-
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) { }
Cevabı göster
Player(std::string n, int l) : name(n), level(l) { } — İki nokta, virgülle ayrılmış üyeler ve gövde doğru sırada.
Sıradaki ders: Yapıcı overloading