Hatalar, hatalar, sorular - sayfa 1678

 
Комбинатор :
Bununla, daha fazla kalıtımın doğrudan yasaklanması olan final anahtar sözcüğünün bir analogunu yapabilirsiniz.
Evet yukarıdaki örnekte de görüldüğü gibi analog yapmak mümkün değil. Özel yöntemler için bile final yazmanız gerekir.
 
fxsaber :
Evet yukarıdaki örnekte de görüldüğü gibi analog yapmak mümkün değil. Özel yöntemler için bile final yazmanız gerekir.

Garip. genel kalıtım için, maksimum erişim korunmalıdır ve özel değil.

Örnekte fonksiyon aşırı yüklenmiş mi?

 
Комбинатор :

Garip. genel kalıtım için, maksimum erişim korunmalıdır ve özel değil.

Örnekte fonksiyon aşırı yüklenmiş mi?

Aynen öyle. Az önce kendimi mi buldum.

Eğer örnekte yaparsan

BASE() {Func();} // вместо void Init() {Func();} Вызов Base.Init() - убрать конечно.

sonra ne olması gerektiğini doğru anlayıp anlamadığınızı başladıktan sonra kendiniz kontrol edebilirsiniz.

 

Terminal günlüğünde alıyorum

2016.09.12 15:49:14.209 Simple_Test (RTS-9.16,M1)       array out of range in 'Simple_Test.mqh' (85,33)

Kaynak kodunun belirtilen yerine beceriksizce tırmanıyorum. Belirtilen satıra hemen gitmek için günlükten böyle bir mesaja çift tıklayabilmeniz uygun olacaktır.

Biri destekliyorsa - konuşun.

 
Sergei Vladimirov :

Klasik, alt sınıflarda geçersiz kılma ile temel sınıftaki arabirimdir:

Klasik, korumalı/genel sanal yöntemlerin geçersiz kılınmasıdır. Ancak özel için - çok açık değil (uygulama açısından). Cevapladığınız için teşekkürler.
 
fxsaber :
Klasik, korumalı/genel sanal yöntemlerin geçersiz kılınmasıdır. Ancak özel için - çok açık değil (uygulama açısından). Cevapladığınız için teşekkürler.

Evet, cevabınızı görmeden örneğimi zaten sildim, gerçekten kötüydü.

güncel Size cevap verirken benim de temellerde kafamı karıştıran bir şey. O örnekte her şey doğruydu, boşuna silindi. Yine bir kullanım örneği ile:

 class CAnimal
{
private :
   void virtual Speak(){}
};

class CDog : public CAnimal
{
public :
   void Speak(){ Print ( "Гав!" );}
};

class CBigDog : public CDog
{
public :
   void Speak(){ Print ( "Громкий гав!" );}
};

void OnStart ()
{
   CDog oDog;
   oDog.Speak();
   
   CBigDog oBigDog;
   oBigDog.Speak();
   
   CDog* pDog = &oBigDog; 
   pDog.Speak();       // "Громкий гав!", а не "Гав!", как было бы без виртуального метода
}
 
Sergei Vladimirov :

güncel Size cevap verirken temellerde kendim kafamı karıştıran bir şey. O örnekte her şey doğruydu, boşuna silindi. Yine bir kullanım örneği ile:

İyi bir örnek değil çünkü Görülecek hiçbir yer CAnimal arayüzünün kullanımı değildir. Evet, iki torun daha kamuoyuna açıklandı. Konuyu anladım, sorun değil.
 
#property indicator_buffers 1 + 1

Derleyici iki tane yapmaz.

 
fxsaber :
İyi bir örnek değil çünkü Görülecek hiçbir yer CAnimal arayüzünün kullanımı değildir. Evet, iki torun daha kamuoyuna açıklandı. Konuyu anladım, sorun değil.

Normal örnek. Soyut bir hayvan, prensipte, bir tür ses çıkarır, ancak tanımsızdır, bu nedenle Speak () yöntemi üzerinde çağrılamaz, yalnızca belirli bir türden bir hayvanda çağrılabilir. Bu nedenle, temel sınıfta özel bir sanal yöntem ilan ediyoruz ve soyundan gelenlerde onu geçersiz kılıp açıyoruz.

 
Sergei Vladimirov :

Normal örnek. Soyut bir hayvan, prensipte, bir tür ses çıkarır, ancak tanımsızdır, bu nedenle Speak () yöntemi üzerinde çağrılamaz, yalnızca belirli bir türden bir hayvanda çağrılabilir. Bu nedenle, temel sınıfta özel bir sanal yöntem ilan ediyoruz ve soyundan gelenlerde onu geçersiz kılıp açıyoruz.

Torunlarda da özel yapmak güzel olurdu. Daha iyi anlamak için. Konu değil kısaca.
Neden: