Ana içeriğe geç
Modül 8 · Ders 2 ders 2Kurstaki 18/18~15 min
Modül dersleri (2/2)

Sınıf Şablonları

Tıpkı işlevler gibi sınıflar da bir veya daha fazla veri türüne göre parametrelendirilebilir. Bu, kodu çoğaltmadan herhangi bir veri türüyle çalışan genel veri yapılarını (listeler, kuyruklar, yığınlar veya sarmalayıcılar gibi) tanımlamamıza olanak tanır.

Sınıf Şablonu Tanımlama

Bir sınıf şablonu bildirmek için sınıf tanımından hemen önce template <typename T> sözdizimini kullanırız. Sınıfın içinde üye değişkenleri, dönüş türlerini veya üye işlev parametrelerini tanımlamak için T tür parametresini kullanabiliriz.

C++
template <typename T>
class Box {
private:
    T value;
public:
    Box(T v) : value(v) {}

    T getValue() const {
        return value;
    }
};

Örnekleme

Bir sınıf şablonunun bir nesnesini oluştururken, türü köşeli ayraçlar <> arasında açıkça belirtmeliyiz (her ne kadar C++17'den başlayarak derleyici bunu bazı bağlamlarda Sınıf Şablonu Argüman Çıkarımı veya CTAD yoluyla anlayabilir):

C++
Box<int> intBox(10);        // T becomes int
Box<double> doubleBox(3.14); // T becomes double

Şablon Uzmanlığı

Bazen bir sınıf şablonu belirli bir türle başlatıldığında farklı bir davranış sergilemesini isteriz. Bu durumda, template <> sözdizimini ve ardından hedef türünü belirten sınıf tanımını kullanarak tam bir uzmanlık tanımlarız:

C++
// Total specialization for the bool type
template <>
class Box<bool> {
private:
    bool value;
public:
    Box(bool v) : value(v) {}

    void printState() {
        std::cout << (value ? "True" : "False");
    }
};

Kendin dene

Egzersiz#cpp.m8.l2.e1
Denemeler: 0Yükleniyor…

T türünde değer adlı özel bir üyeyi, onu başlatan bir yapıcıyı ve değeri döndüren genel yöntem getValue() const'ı içeren Box adında bir sınıf şablonu bildirin.

Düzenleyici yükleniyor…
İpucu göster

'Box' sınıf bildiriminin başına 'template <typename T>' eklemeyi unutmayın.

3 denemeden sonra çözüm mevcut

Egzersiz#cpp.m8.l2.e2
Denemeler: 0Yükleniyor…

T türünde ortak üye verileri, Wrapper(T d) yapıcısı ve verileri std::cout'a yazdıran print() yöntemiyle birlikte bir sınıf şablonu Wrapper<T> bildirin. Ardından, Print() yönteminin tek tırnak içine alınmış karakteri (örneğin, A yerine 'A') yazdırdığı Wrapper<char> için tam bir uzmanlık oluşturun.

Düzenleyici yükleniyor…
İpucu göster

'Sarmalayıcı<karakter>'in toplam uzmanlığını belirtmek için 'şablon <>' kullanın.

3 denemeden sonra çözüm mevcut