Hatalar, hatalar, sorular - sayfa 2356
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
C++'da: A::f()
Bu kod ne gösteriyor?
Bu kod ne gösteriyor?
Aynısı.
Aynısı.
MQL olarak (C++'a dönüştürülmesi şartıyla). Ama kendin kontrol edebilirsin
Kontrol:
Kontrol:
Bir şeyi kontrol ettiğinizi sanmıyorum.
MQL'deki böyle bir kayıt, a - nesnesinin b1 işaretçisinde bulunan nesneye kopyalanması anlamına gelir. Genel olarak elbette derlenmemeliydi.
Bir yığındaki nesnelere ve işaretçilere müdahale etmemek için, işaretçiler için p önekini kullanmak daha iyidir.
Kontrol:
Lütfen bu hatalı davranış üzerine bahse girmeyin.
2 sorun var(?):
sanal B::f() aşırı yüklenmemiştir, bu nedenle sanal bir çağrı yerine basitti, B::f()'de üyelere adresleme yok, bu nedenle "işaretçi" ile erişim de kesildi
İkinci durumda, A::f() bir sanal çağrı girişimidir, "işaretçi" ile erişim vardır, ancak a1 nesnesi yoktur çünkü A *a1=b için ayrıca boş kopya oluşturucu A::A(const A &) için bir çağrı yapıldı
Lütfen bu hatalı davranış üzerine bahse girmeyin.
2 sorun var(?):
Umarım bu hatalı davranışı düzeltirsiniz? ( derleme hatası yapın) Çünkü yanlışlıkla böyle bir hata yapabilirsiniz ve derleyici hiçbir şekilde tepki vermez.
Umarım bu hatalı davranışı düzeltirsiniz? Çünkü yanlışlıkla böyle bir hata yapmak mümkündür ve derleyici hiçbir şekilde tepki vermez.
Evet, düzelteceğiz.
Öncelik düşük olarak ayarlanmıştır, çünkü çalışma kodu sadece boş sınıflar için elde edilir
Lütfen bu hatalı davranış üzerine bahse girmeyin.
2 sorun var(?):
sanal B::f() aşırı yüklenmemiştir, bu nedenle sanal bir çağrı yerine basitti, B::f()'de üyelere adresleme yok, bu nedenle "işaretçi" ile erişim de kesildi
İkinci durumda, A::f() bir sanal çağrı girişimidir, "işaretçi" ile erişim vardır, ancak a1 nesnesi yoktur çünkü A *a1=b için ayrıca boş kopya oluşturucu A::A(const A &) için bir çağrı vardı
Ayrıntılı cevap için teşekkürler, ancak mantığı biraz anlamadım.
1) Derleyici neden B* b1=a yapısını kopya operatörü A:: A(const A&), için bir çağrı olarak algılıyor (ve B:: B(const A&) çağrısı olarak değil, çünkü B sınıfı operatörün solunda =)
2) Derleyici neden bir "kopya oluşturucu eksik" uyarısı vermedi?
3) Neden var olmayan nesnelerde yöntemleri "basit" olarak çağırmaya izin veriliyor (doğrudan B::f() öğesini çağırmaya çalışırken "statik olmayan bir yöntemi çağırıyor" derleme hatası veriyor)
4) Peki, derleyici neden genellikle sanal bir yönteme "basit" bir çağrıya izin veriyor? Bence sanallık hiçbir şekilde nesnedeki verinin varlığına veya yokluğuna bağlı olmamalıdır.
1) Derleyici neden B* b1=a yapısını kopya operatörü A:: A(const A&), için bir çağrı olarak algılıyor (ve B:: B(const A&) çağrısı olarak değil, çünkü B sınıfı operatörün solunda =)
Oldukça doğru. Derleyicinin aşağıdaki gibi şeylere serbestçe izin vermesi başka bir MQL hatasıdır: B b = a; Bu, kapsülleme ilkelerinin ihlalidir. C++'da bu doğal olarak derlenmez, açık bir döküm gereklidir. Ve MQL'nin eski yapılarında bunu yapmak da imkansızdı.