Kapsamlı enum class
Tür güvenli numaralandırmalar
Kapsamlı enum class, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.
Düz Sıralamalar Adları Dışarı Sızdırır
Klasik C tarzı enum, adlarını çevredeki kapsama taşır ve sessizce int'e dönüşür. Bu durum, ad çakışmalarını ve yanlışlıkla yapılan karşılaştırmaları kolaylaştırır.
- sınıflı sıralama her iki sorunu da çözer.
- Değerler kapsamlı ve güçlü tür denetimli olur.
#include <iostream>
enum Color { Red, Green, Blue };
int main() {
Color c = Green;
int x = c; // implicit conversion to int
std::cout << x << "\n";
}Kapsamlı Sıralama Tanımlama
Kapsamlı bir sıralama oluşturmak için class (veya struct) anahtar sözcüğünü ekleyin. Artık her değeri sıralamanın adıyla nitelemelisiniz.
#include <iostream>
enum class Color { Red, Green, Blue };
int main() {
Color c = Color::Green;
if (c == Color::Green) std::cout << "green\n";
}Örtük Dönüşüm Yok
Kapsamlı bir sıralama örtük olarak asla int'e dönüşmez. Bu, bir sıralamanın yanlışlıkla aritmetik işlemde kullanılması gibi hataları önler.
- Sayıyı elde etmek için açıkça dönüştürmeniz gerekir.
#include <iostream>
enum class Color { Red, Green, Blue };
int main() {
Color c = Color::Blue;
int n = static_cast<int>(c); // explicit
std::cout << n << "\n"; // prints 2
}Temel Tür
Varsayılan olarak temel tür int'dir; ancak yer kazanmak veya bir protokole uymak için daha küçük ya da belirli bir tamsayı türü seçebilirsiniz.
#include <iostream>
#include <cstdint>
enum class Status : std::uint8_t { Ok = 0, Warn = 1, Error = 2 };
int main() {
Status s = Status::Warn;
std::cout << static_cast<int>(s) << "\n";
}Özel Değerler
Sıralama değerlerine açık değerler atayabilirsiniz. Açık bir değeri izleyen değerler, saymayı o değerden sürdürür.
#include <iostream>
enum class Http { Ok = 200, NotFound = 404, ServerError = 500 };
int main() {
Http h = Http::NotFound;
std::cout << static_cast<int>(h) << "\n";
}Sıralama Üzerinde switch Kullanımı
Sıralamalar switch ifadeleri içinde özellikle kullanışlıdır. Her durumu listelemek amacı açıkça ortaya koyar ve derleyicinin eksik durumlar konusunda uyarıda bulunmasını sağlar.
#include <iostream>
enum class Dir { North, East, South, West };
const char* name(Dir d) {
switch (d) {
case Dir::North: return "N";
case Dir::East: return "E";
case Dir::South: return "S";
case Dir::West: return "W";
}
return "?";
}
int main() { std::cout << name(Dir::East) << "\n"; }İşlev Bağımsız Değişkenleri Olarak Sıralamalar
Kapsamlı bir sıralamayı aktarmak, yalın bir int veya bool aktarmaktan çok daha iyi şekilde amacı ifade eder. Derleyici yalnızca geçerli sıralama değerlerinin kullanılmasını zorunlu kılar.
#include <iostream>
enum class Align { Left, Center, Right };
void render(const char* text, Align a) {
std::cout << text << " aligned " << static_cast<int>(a) << "\n";
}
int main() { render("Hi", Align::Center); }Sıralama Değerlerini Karşılaştırma
Kapsamlı sıralamalar == ve != işleçlerini doğrudan destekler. İlişkisel işleçler (<, >) de çalışır; çünkü değerler sıralıdır.
#include <iostream>
enum class Level { Low, Medium, High };
int main() {
Level l = Level::High;
std::cout << (l > Level::Low ? "above low\n" : "low\n");
}Kavramsal Olarak Dolaşma
Sıralamalar kendiliğinden dolaşılamaz; ancak yaygın bir yaklaşım, temel tamsayılar üzerinden açıkça dönüştürme yapmaktır. Aralığı bilmek için Count gibi bir sınır değeri bulundurun.
#include <iostream>
enum class Coin { Penny, Nickel, Dime, Count };
int main() {
for (int i = 0; i < static_cast<int>(Coin::Count); ++i)
std::cout << i << " ";
std::cout << "\n";
}Tür Güvenliği Neden Önemlidir
İlişkisiz iki kapsamlı sıralama, ikisinin de None adlı bir değeri olsa bile yanlışlıkla birleştirilemez. Derleyici bunları farklı türler olarak ele alır.
#include <iostream>
enum class Fruit { None, Apple };
enum class Tool { None, Hammer };
int main() {
Fruit f = Fruit::None;
// Tool t = f; // would NOT compile
std::cout << (f == Fruit::None) << "\n";
}Düz Sıralamalar Ne Zaman Kullanılır
Düz sıralamalar, örtük int dönüşümünün kullanışlı olduğu eski API'lerde ve bit bayrağı kodlarında hâlâ görülür. Yeni kodlarda özel bir nedeniniz olmadıkça sınıflı sıralamayı tercih edin.
Kısa Kontrol
Kapsamlı sıralamalar konusundaki anlayışınızı sınayın.
Özet
Kapsamlı sıralamaları öğrendiniz:
enum classdeğerleri kapsama alır ve örtük int dönüşümünü engeller.- Sayıyı okumak için
static_cast<int>kullanın. : typeile temel tür seçin.- Tür güvenli ve kendini açıklayan kod için
enum class'ı tercih edin.
Sıkça Sorulan Sorular
“Kapsamlı enum class” dersi ücretsiz mi?
Evet — “Kapsamlı enum class” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.
“Kapsamlı enum class” dersinde ne öğreneceğim?
Tür güvenli numaralandırmalar C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C++ Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Kapsamlı enum class” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Kapsamlı enum class
- Birlikler ve Riskleri
- std::variant
- std::visit