C++: sınıflar, STL ve güvenli bellek
Sınıf tasarlar, STL kapsayıcı ve algoritmalarını kullanır, akıllı işaretçilerle bellek hatalarından kaçınan C++ kodu yazarsın.
Seviye 201 · 19 ders · 15 pratik lab
Dersler
Sınıflar
- Sınıflar, kurucular ve yıkıcılar: Sınıf yazar, kurucuyla nesneyi geçerli durumda başlatır ve yıkıcının ne zaman çalıştığını görürsün.
- Kapsülleme ve const üye işlevler: private alanları kontrollü işlevlerle sunar, nesneyi değiştirmeyen işlevleri const ile işaretlersin.
- static üyeler ve friend
- İşleç aşırı yükleme: Kendi sınıfın için ==, << ve + gibi işleçleri anlamlı ve beklenen biçimde tanımlarsın.
- Miras, sanal işlevler ve çok biçimlilik: Türetilmiş sınıflar yazar, virtual ile çalışma zamanında doğru işlevin seçilmesini sağlar, sanal yıkıcıyı unutmazsın.
- Soyut sınıflar ve arayüzler: Saf sanal işlevlerle alt sınıfların uyması gereken sözleşmeyi tanımlarsın.
- Kısa görev: alan ve çevre hesaplayan şekil hiyerarşisi
Bellek yönetimi
- İşaretçiler, new ve delete: Elle bellek ayırıp bırakmanın nasıl çalıştığını ve neden sızıntıya açık olduğunu görürsün.
- RAII: kaynakları nesne ömrüne bağlamak: Bellek, dosya ve kilidi nesnenin yıkıcısıyla otomatik bırakan sınıflar tasarlarsın.
- unique_ptr, shared_ptr ve weak_ptr: Akıllı işaretçilerle sahipliği açıkça ifade eder, elle delete yazmadan sızıntısız kod yazarsın.
- Kopyalama, taşıma ve beşli kuralı: Sınıfın kopyalanma ve taşınma davranışını bilinçli seçer, çift silme gibi hatalardan korunursun.
- Bellek hatalarını bulmak: AddressSanitizer ve Valgrind: g++ ile -fsanitize=address açarak sızıntı ve geçersiz erişimleri tespit eder, raporu okursun.
- Kısa görev: ham işaretçili sınıfı akıllı işaretçiye taşı
STL ve modern C++
- STL kapsayıcıları: vector, map, set, unordered_map: Veriye uygun kapsayıcıyı seçer, ekleme, arama ve silme işlemlerini yaparsın.
- İteratörler ve algoritmalar: sort, find, count_if: El yazması döngü yerine hazır algoritmaları kullanır ve iteratörün geçersiz kalma durumlarını bilirsin.
- Lambda ifadeleri ve şablonlara giriş: Algoritmalara özel ölçüt veren lambda yazar ve türden bağımsız basit bir şablon işlevi tanımlarsın.
- string_view ve span ile kopyasız, sınırlı görünüm: Veriyi kopyalamadan işlevlere geçirir, görünümün sahip olmadığı belleğin ömrüne dikkat edersin.
- Kısa görev: STL ile kelime sıklığı tablosu
Bitirme
- Bitirme görevi: sızıntısız, sınırları denetlenen envanter programı: Sınıflar, akıllı işaretçiler ve STL ile envanter programı yazar, sanitizer’la temiz çalıştığını doğrularsın.
Pratik lablar
- Sıcaklık sınıfına const üye işlevler eklemek: Sıcaklık sınıfına birim dönüşümü yapan const üye işlevleri ekle ve const nesne üzerinde derlenmeyen kullanımı düzelt.
- Süre sınıfı için işleçleri tanımlamak: Dakika ve saniye tutan süre sınıfına +, ==, < ve << işleçlerini ekle; taşan saniyelerin dakikaya aktarıldığını test et.
- Nesne sayacındaki tutarsızlığı bulmak: Kopyalama ve taşıma sırasında yanlış sayan statik nesne sayacını tüm özel üye işlevleri ele alarak düzelt ve yaşam döngüsü testlerini geç.
- Bildirim türlerini sanal işlevle ayırmak: E-posta ve SMS bildirimlerini ortak taban sınıftan türet; gönder işlevini override ile ez ve taban işaretçisi üzerinden çağır.
- Depolama için soyut arayüz yazmak: Saf sanal işlevli bir depolama arayüzü tanımla; bellek içi ve dosya tabanlı iki gerçekleştirimin aynı testleri geçtiğini göster.
- Eksik sanal yıkıcının sızıntısını kapatmak: Taban işaretçisiyle silinen türetilmiş nesnelerin kaynak sızdırdığı sınıf ağacında sorunu ASan ile göster, sanal yıkıcıyı ekle ve dilimleme hatasını da gider.
- Fabrika işlevini unique_ptr döndürür yapmak: Ham işaretçi döndüren ve çağıranın silmeyi unuttuğu fabrika işlevini std::make_unique kullanacak şekilde değiştir.
- C dosya tanıtıcısını RAII ile sarmak: fopen ile açılan dosyayı her çıkış yolunda kapatan, kopyalanamayan ama taşınabilen bir sarmalayıcı sınıf yaz.
- shared_ptr döngüsünü weak_ptr ile kırmak: Üst ve alt düğümlerin birbirini shared_ptr ile tuttuğu ağaçta hiç çalışmayan yıkıcıları bul, döngüyü weak_ptr ile kır ve sızıntı testini geç.
- Elle yazılan özel işlevleri kaldırmak: Ham dizi yerine std::vector kullanarak sınıfın elle yazılmış kopyalama ve yıkıcı işlevlerini gereksiz kıl ve testlerin aynen geçtiğini göster.
- Tampon sınıfına beşli kuralı uygulamak: Yalnızca yıkıcısı olan ve kopyalanınca çift silmeye yol açan tampon sınıfına kopya ve taşıma işlevlerini ekle; kendine atamayı da ele al.
- ASan raporundan kullanım sonrası serbest hatasını çözmek: Görev listesinde silinen düğüme erişen kodu AddressSanitizer raporundaki yığın izlerinden bul, onar ve Valgrind'in de temiz çıktığını göster.
- Sözcükleri uzunluğa göre gruplamak: Metindeki sözcükleri std::map ile uzunluklarına göre grupla ve her uzunluk için alfabetik sıralı listeyi döndür.
- Lambda ile koşullu sayım yapmak: Eşik değerini yakalayan bir lambda ile count_if ve sort kullanarak stok altı ürünleri say ve fiyata göre sırala.
- Sarkan string_view parçalarını onarmak: Geçici dizgiye bakan string_view döndürdüğü için çöp veri üreten ayrıştırıcıyı ömür kurallarına göre düzelt ve span ile sınır denetimli sürümünü yaz.
Kurs hakkında
Sınıf tasarlar, STL kapsayıcı ve algoritmalarını kullanır, akıllı işaretçilerle bellek hatalarından kaçınan C++ kodu yazarsın.
Ne öğreneceksin
- Sınıflar
- Bellek yönetimi
- STL ve modern C++
- Bitirme
Ön koşullar
Aynı yolun 101 düzeyindeki kurslarını bitirmiş olmak ya da o konuları biliyor olmak yeterlidir.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde geçer. Kurulum gerekmez; lab her derste temiz başlar.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 201 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.