OOP. Başvuru soruları

 

" OOP " konusu, "iyi ya da değil" gibi bir fikir alışverişi ile sonuçlandı. Daha sıradan sorulara cevap istiyorum.

Soru. C ++ ders kitabında, bir sınıfın bir örneğinin aynı anda iki farklı ana sınıfın çocuğu yapılabileceğinden bahsettim, örneğin

 class A
{...}
class B
{...}
class C : public A : public B
{...}

Veya bunun gibi bir şey (kaynağı bulamıyorum). Peki ya bu MQL5'te? Bir sınıfın aynı anda iki farklı ebeveyn sınıfın çocuğu olduğunu söylemek mümkün müdür? sözdizimi nedir?

El Kitabındaki "Çoğul kalıtım yoktur" ifadesi böyle bir durumla ilgili değil mi?

 
Yedelkin :

" OOP " konusu, "iyi ya da değil" gibi bir fikir alışverişi ile sonuçlandı. Daha sıradan sorulara cevap istiyorum.

Soru. C ++ ders kitabında, bir sınıfın bir örneğinin aynı anda iki farklı ana sınıfın çocuğu yapılabileceğinden bahsettim, örneğin

Veya bunun gibi bir şey (kaynağı bulamıyorum). Peki ya bu MQL5'te? Bir sınıfın aynı anda iki farklı ebeveyn sınıfın çocuğu olduğunu söylemek mümkün müdür? sözdizimi nedir?

El Kitabındaki "Çoğul kalıtım yoktur" ifadesi böyle bir durumla ilgili değil mi?

MQL5'te çoklu kalıtım desteklenmez, ancak bunun gibi bir şeyi uygulayabileceğiniz bir nesne işaretçisini geçirmek için ilginç bir mekanizma vardır.

 

OOP ile kodu yapılandırmanın çok uygun olduğu ortaya çıktı (banalite için üzgünüm). Yöntemleri birer birer alıp çalkalıyorsunuz. Çok verimli ve görsel. Ancak soru ortaya çıktı, bu tür çoklu sarma, işlemci tarafından kod işleme hızını etkiler mi? Spesifik olarak, bu iki kod seçeneği arasında yürütme hızında herhangi bir fark var mı:

 double ddd= 0.0 ;                   //первый вариант кода, инициализация без применения функций/методов
 

double ddd;                       //второй вариант кода, инициализация с применением функций/методов
void function( double a) { a= 0.0 ; }
...
function(ddd);

Veya derleme aşamasında, kod insan dilinden makine diline dönüştürülür, böylece bir bilgisayar için bu seçeneklerin ikisi de işlem hızı açısından farklı olmaz mı?

 
Urain :

MQL5 çoklu kalıtımı desteklemiyor...

Onlar. "Çoklu kalıtım" - bu ebeveynlerin çoğulluğu mu?

 
Yedelkin :
Onlar. "Çoklu kalıtım" - bu ebeveynlerin çoğulluğu mu?

Evet, bir ebeveyne sahip olabilen bir sınıftır, basamaklamak mümkündür, ancak iki ebeveyn ve mql5 olamaz.

Prensip olarak, kalıtım yerine sınıfın kendisinde "type as parent" sınıfını çağırabilir ve "type as parent" verilerine onun işaretçisi aracılığıyla erişebilirsiniz.

 
Urain :
Evet, bir ebeveyne sahip olabilen bir sınıftır, basamaklamak mümkündür, ancak iki ebeveyn ve mql5 olamaz.
Tamam anladım. Hemen terimin anlamına bakmak için tahmin etmedim.
 
Yedelkin :

Bu kod, çoklu kalıtımdan neredeyse hiç farklı değildir.

 class C_A
  {
public :
                     C_A( void ){};
                    ~C_A( void ){};
   double             a;
  };
//+------------------------------------------------------------------+
class C_B
  {
public :
                     C_B( void ){};
                    ~C_B( void ){};
   double             b;
  };
//+------------------------------------------------------------------+
class C_C
  {
public :
   C_A              *ua;
   C_B              *ub;
                     C_C( void ){ua= new C_A();ub= new C_B();};
                    ~C_C( void ){ delete ua; delete ub;};
  };
//+------------------------------------------------------------------+
Aslında, C_C sınıfı, karşılık gelen işaretçiler aracılığıyla C_A ve C_B verilerine erişebilir.
 
Urain :

Bu kod, çoklu kalıtımdan neredeyse hiç farklı değildir.

Aslında, C_C sınıfı, karşılık gelen işaretçiler aracılığıyla C_A ve C_B verilerine erişebilir.

Güzel! Yapıcıda dış sınıfın bir örneğini yaratmayı düşünmezdim. Yardım için teşekkürler!

Ek. Ama bu çizgide

C_C( void ){ua= new C_A();ub= new C_B();};

yeni operatör, C_A sınıfının C_A() yapıcısına uygulanır.

Referans kitabından, new operatörünün işleneninin, yapıcısı değil, sınıfın kendisi olduğunu anladım. Hangi özellikler olabilir?

 
Bu arada, bir süre sonra parametreler yapıcılar için çalışacak ve bu da geliştiricilerin hayatını büyük ölçüde kolaylaştıracak.
 
Renat :
Bu arada, bir süre sonra parametreler yapıcılar için çalışacak ve bu da geliştiricilerin hayatını büyük ölçüde kolaylaştıracak.
evet hatırladım :)
 
Yedelkin :

Güzel! Yapıcıda dış sınıfın bir örneğini oluşturmayı düşünmezdim. Yardım için teşekkürler!

Ek. Ama bu çizgide

yeni operatör, C_A sınıfının C_A() yapıcısına uygulanır.

Dizinden, yeni operatörün işleneninin, yapıcısı değil, sınıfın kendisi olduğunu anladım. Hangi özellikler olabilir?

Yeni operatör , sınıfın bir örneğini oluşturur ve bir yapıcı çağrısı ile ilişkilendirilir. Bu, sözdiziminde yazılmıştır, bu nedenle başka türlü çağrılamaz.

Statik bir reklamda her şey otomatik olarak gerçekleşir.

Bu arada, aynı zamanda çalışacak ve otomatik olarak yok edilecektir.

 class C_C
  {
public :
   C_A               ua;
   C_B               ub;
                     C_C( void ){};
                    ~C_C( void ){};
  };
//+------------------------------------------------------------------+
Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
  • www.mql5.com
Основы языка / Операторы / Оператор создания объекта new - Документация по MQL5