Evet. Bu şekilde doğrudan döküm yapmak çok kötü. Artılarda özellikle bu amaç için dynamic_cast vardır, burada tamamen doğru bir şekilde döküm yapamazsınız ve potansiyel bir örtük ve ciddi hata kaynağıdır. Ve ciddiyet açısından güvenli olmayan işaretçiler ve referanslardan çok daha iyi değildir.
Mesele şu ki, CChartObjectRectLabel, CChartObjectButton ve CChartObjectEdit mirasçı sınıflarının erişilmesi gereken kendi benzersiz yöntemleri vardır. Ve standart kütüphanedeki CChartObject temel sınıfı aynı sanal metotlara sahip değildir.
TheXpert: Evet. Bu şekilde doğrudan döküm yapmak alışılmışın dışındadır. Artılarda özellikle bu amaç için dynamic_cast vardır, burada tamamen doğru bir şekilde döküm yapamazsınız ve potansiyel bir örtük ve ciddi hata kaynağıdır. Ve ciddiyetle, güvenli olmayan işaretçilerden ve referanslardan çok daha iyi değildir.
Evet, burada forumda bir soru sormadan önce, internette C++'ın dynamic_cast operatörüne ( dinamik veri tanımlama mekanizması) sahip olduğunu buldum.
Şimdi yukarıdaki bağlantıya bakıyorum:
// Dinamik veri tipi tanımlama mekanizması sadece polimorfik olanlar için kullanılabilir // sınıflar (yani en az bir sanal üye işlev içeren sınıflar)
Yani bu zorunlu bir koşul mu? Ve eğer temel sınıfta sanal metotlar yoksa, dynamic_cast çalışmayacak mı?
Not: >> Burada dynamic_cast hakkında daha fazla şey okuyorum (MSDN).
Bir güvenlik açığı mı buldunuz? )
Polimorfizm kullanmak daha iyi olmaz mı?
Yaklaşık olarak:
Mesele şu ki, CChartObjectRectLabel, CChartObjectButton ve CChartObjectEdit mirasçı sınıflarının erişilmesi gereken kendi benzersiz yöntemleri vardır. Ve standart kütüphanedeki CChartObject temel sınıfı aynı sanal metotlara sahip değildir.
Yukarıdaki örneğimde...
yöntemlerine nasıl erişilir?
...bu şekilde ortaya çıkıyor:
Evet. Bu şekilde doğrudan döküm yapmak alışılmışın dışındadır. Artılarda özellikle bu amaç için dynamic_cast vardır, burada tamamen doğru bir şekilde döküm yapamazsınız ve potansiyel bir örtük ve ciddi hata kaynağıdır. Ve ciddiyetle, güvenli olmayan işaretçilerden ve referanslardan çok daha iyi değildir.
Evet, burada forumda bir soru sormadan önce, internette C++'ın dynamic_cast operatörüne ( dinamik veri tanımlama mekanizması) sahip olduğunu buldum.
Şimdi yukarıdaki bağlantıya bakıyorum:
Yani bu zorunlu bir koşul mu? Ve eğer temel sınıfta sanal metotlar yoksa, dynamic_cast çalışmayacak mı?
Not: >> Burada dynamic_cast hakkında daha fazla şey okuyorum (MSDN).
Kahretsin, ve bundan sonra dil güvenliğinden mi bahsediyorsun?
Muhtemelen C/C++'da olduğu gibi her şeye serbestçe döküm yapabileceğinizi düşünüyorsunuz.
Öyle değil ve güvenlikle ilgili yanlış bir şey yok.
Muhtemelen C/C++'da olduğu gibi herhangi bir şeye serbestçe döküm yapabileceğinizi düşünüyorsunuz.
Öyle değil ve güvenlikle ilgili yanlış bir şey yok.
Tesadüfen bu hatayı aldım, bu da sözlerinizi doğruluyor gibi görünüyor. )
Öyle değildir ve güvenlikle ilgili yanlış bir şey yoktur.
Hayır, dynamic_cast'i derleme zamanında kontrol etmek mümkün değildir.
Yukarıdaki yorum çalışma zamanında cast kontrolünün sonucunu göstermektedir.
Çok katıdır, RTTI mekanizması üzerinde çalışır, çünkü hayalet durumunda kimin kim olduğunu tam olarak biliriz.
Yukarıdaki yorum, rantime'daki döküm kontrolünün sonucunu göstermektedir.