C++
Yapıcı overloading
Aynı sınıfta birden çok yapıcı tanımlamayı öğrenirsin.
Yapıcı overloading
Bir sınıfta birden fazla yapıcı metot tanımlanabilir; buna overloading (aşırı yükleme) denir. Her yapıcı farklı parametre listesine sahip olmalıdır. Derleyici, çağrıdaki parametrelere bakarak hangi yapıcının çalışacağını seçer.
Örnek: class Note { public: Note() { title = "Boş"; } Note(std::string t) { title = t; } std::string title; };. Note a; birinci, Note b("Ödev"); ikinci yapıcıyı çağırır. İki yapıcı da Note adını taşır ama parametreleri farklı olduğu için çakışmaz. Bu, nesneyi farklı biçimlerde başlatma esnekliği verir.
Çakışma ve belirsizlik
Overloading'de parametre listeleri net biçimde farklı olmalıdır. Aksi halde belirsizlik (ambiguity) oluşur ve derleyici hata verir. Örnek: Note(int) ve Note(double) tanımlıysa, Note n('A'); çağrısı hem int'e hem double'a dönüşebilir; derleyici seçemez.
Varsayılan parametreli yapıcılarla da dikkatli olmak gerekir. Note(int x = 0) tanımlıysa Note n; çağrısı bu yapıcıya gider. Aynı anda parametresiz Note() de tanımlıysa belirsizlik doğar. Varsayılan parametrelerle aşırı yüklemeyi aynı anda kullanmak karışıklığa yol açar.
Uygulama Note sınıfına iki aşırı yüklenmiş yapıcı ekle
Note sınıfını tanımla. public: altına std::string title; üye değişkeni, Note() { title = "Boş"; } ve Note(std::string t) { title = t; } yapıcı metotlarını ekle. main içinde iki örnek oluştur: biri parametresiz, diğeri "Ödev" parametreli. İkisinin de title'ını std::cout ile ayrı satırlarda yazdır.
Örnek çözümü göster
#include <iostream>
#include <string>
class Note {
public:
std::string title;
Note() {
title = "Boş";
}
Note(std::string t) {
title = t;
}
};
int main() {
Note a;
Note b("Ödev");
std::cout << a.title << std::endl << b.title;
return 0;
}
Kendini test et
-
Note sınıfında Note() ve Note(std::string) tanımlıysa Note b("Ödev"); hangisini çağırır?
Note() { title = "Boş"; }
Note(std::string t) { title = t; }
- Note(std::string t) yapıcısını
- Note() yapıcısını
- İkisini birden
- Derleme hatası, hiçbiri seçilmez
Cevabı göster
Note(std::string t) yapıcısını — Derleyici parametre türüne göre en uygun yapıcıyı seçer.
-
İkinci yapıcıyı çağır
Note note____;
Cevabı göster
Note note("Ödev");
-
Çağrıyı çağrılan yapıcıya eşle
- Note a;
- Note()
- Note b("Ödev");
- Note(std::string)
- Note c(7);
- Note(int)
- Note d('A');
- belirsizlik
Sıradaki ders: Destructor