Okul çocukları için OOP. - sayfa 16

 

Moderatörler lütfen tüm tartışmaları ayrı bir başlığa taşıyın. Muhtemelen yaklaşık bir düzine için OOP'nin avantajlarının tartışılmasıyla bu tür dallarla ne ilgisi var.

 
Alexey Viktorov :

Bir soru daha: Bir değişken bildirmek, bir işaretçi almak/oluşturmak, bir nesne örneği oluşturmak arasındaki fark nedir. Daha doğrusu, farkın kendisi değil, hangi durumlarda uygulamak daha iyidir. Örneğin bir pozisyon açmak için değişken bildirmek yeterlidir.

Ve hangi durumlarda bir işaretçi kullanmak daha doğrudur, bu durumlarda nesne örneği olmadan yapılamaz.

Her iki yöntemin de artıları ve eksileri nelerdir?

1. Nesne global kapsamdaysa , statik bir nesnedir. Statik bellekte bulunur ve program var olduğu sürece var olur.

Programın ilk işlevi çağrılmadan önce yapıcısı çağrılır. Yıkıcı, OnDeinit()'den sonra çağrılır.

2. Bir fonksiyon içinde bildirilen nesneler yerel nesnelerdir. Yığın üzerine yerleştirilirler. İşlev çıktığında yok edilir.
Kıvrımlı parantezler içinde yerel bir nesne bildirebilirsiniz.


Örneğin şöyle:

 if ( ... )
{
  MyClass object ;
  ...
}   //  Здесь вызывается деструктор.

Hatta bunun gibi:

{
  MyClass object ;
  ...
}   //  Здесь вызывается деструктор.

Bloktan çıkarken yok edilecek. Yıkım üzerine, yıkıcı çağrılır.

Yığının boyutu genellikle sınırlı olduğundan, yığının üzerine çok büyük nesneler yerleştirilemez.

3. Yeni operatör kullanılarak oluşturulan nesneler dinamik bellektedir (yığın).
Silme operatörü ile açıkça yok edilene kadar var olurlar.


Misal:

 void func()
{
  Myclass* pObject = new MyClass();
}

Bu örnek iki değişken oluşturur. Dinamik bellekte MyClass sınıfının bir nesnesi.

Ve pObject değişkeni Myclass için bir işaretçidir. Dinamik bellekte bir nesnenin adresi atanır.

İşlev çıktığında, pObject değişkeni yok edilecek, ancak nesne dinamik bellekte kalacaktır.

Silmek için adresini bir yere kaydetmeniz gerekir.

Oluşturulup yok edildiğinde, yapıcı ve yıkıcı da denir.

Dinamik değişkenlere erişmek genellikle yerel değişkenlere erişmekten daha uzun sürer.


Bir nesne oluşturduğunuzda tüm bunları göz önünde bulundurmalısınız.


 
Koldun Zloy :

1. Nesne global kapsamda ise, statik bir nesnedir. Statik bellekte bulunur ve program var olduğu sürece var olur.

...

Ve hiç kimse bir şey söylemeyecek, ZyKspert bile.
 
Koldun Zloy :

Bu seçenekle doğru anlıyorum

 #include <Trade\Trade.mqh>
CTrade trade;

int OnInit ()
{
 trade.SetExpertMagicNumber( 123 );
}

void OnTick ()
{
 CTrade trade;
 trade.Buy( 0.1 );
}

derleyici uyarısını yok sayarak , 123 değil sihirle bir pozisyon açılabilir mi ?

Yani OnTick işlevinde yeni bir nesne oluşturulacak ve içindeki sihir 123'e eşit olmayacak.

 
Alexey Viktorov :

Bu seçenekle doğru anlıyorum

derleyici uyarısını yok sayarak , 123 değil sihirle bir pozisyon açılabilir mi ?

Yani OnTick işlevinde yeni bir nesne oluşturulacak ve içindeki sihir 123'e eşit olmayacak.

Uzman MagicNumber'ı Ayarla

 
Alexey Viktorov :

Bu seçenekle doğru anlıyorum

derleyici uyarısını yok sayarak , 123 değil sihirle bir pozisyon açılabilir mi ?

Yani OnTick işlevinde yeni bir nesne oluşturulacak ve içindeki sihir 123'e eşit olmayacak.

Evet doğru. Bunlar iki farklı nesnedir. OnTick'teki yerel ticaret nesnesi, global nesne ile aynı ada sahip olduğundan, yalnızca OnTick işlevinde erişilebilir. Genel nesne kapsam dışında. Bu nedenle, yerel ticaret MagicNumber henüz ayarlanmadı.

 
Alexey Viktorov :

Bu seçenekle doğru anlıyorum

 #include <Trade\Trade.mqh>
CTrade trade;   // Объект № 1 в глобальной области программы

int OnInit ()
{
 trade.SetExpertMagicNumber( 123 );
}

void OnTick ()
{
 CTrade trade;  // Объект № 2 в локальной области OnTick()
 trade.Buy( 0.1 );
}

derleyici uyarısını yok sayarak , 123 değil sihirle bir pozisyon açılabilir mi ?

Yani OnTick işlevinde yeni bir nesne oluşturulacak ve içindeki sihir 123'e eşit olmayacak.

Her şey değişkenlerle tamamen aynıdır.

Ve odaklan:

 #include <Trade\Trade.mqh>
CTrade trade;   // Объект trade в глобальной области программы

int OnInit ()
{
 trade.SetExpertMagicNumber( 123 );
}

void OnTick ()
{
 CTrade *trade_ptr=GetPointer(trade);  // Указатель на объект trade
 trade_ptr.Buy( 0.1 );
}
 
O zaman neden bu Set Expert MagicNumber'a ihtiyacınız var?
 
Сергей Таболин :
O halde neden bu Set Expert MagicNumber'a ihtiyacınız var?

Büyüyü ticaret sınıfı nesnesine ayarlar. Artık kod tabanında yapılması alışılmış olduğu gibi, tüm program için CTrade sınıfının birden fazla nesnesi olabilir. Aynı nesne. Ve bu nesne ticaret işlemlerinin yürütülmesine hizmet eder. Ve tüm program için bir nesne yapmak hiç de gerekli değildir ve başlatma sırasında ayarlanan sihir, kayma ve diğer parametreleri her değiştirmeniz gerektiğinde, bunları tekrar sıfırlayın. İşlem gören sembollerin her biri için kendi işlem nesnenizi oluşturabilir, CTrade sınıfının bu belirli nesnesinin ait olduğu sembolün özelliklerine göre gerekli parametreleri ayarlayabilir ve istediğiniz nesneye bir işaretçi alarak sakince ticaret yapabilirsiniz. Belirlenen seçenekleri geçersiz kılmadan, istenen sembolden istenen ticaret sınıfının.
Veya farklı bir sihirbazla çalışmak için uygun ayarlarla ayrı bir ticaret nesnesi belirleyebilirsiniz. Sonuçta, bir Uzman Danışmanda birkaç sihirbaz olabilir.

Her şey neyi ve nasıl kullandığımızı anlamaya bağlıdır.

 
Artyom Trishkin :

Büyüyü ticaret sınıfı nesnesine ayarlar. Artık kod tabanında yapılması alışılmış olduğu gibi, tüm program için CTrade sınıfının birden fazla nesnesi olabilir. Aynı nesne. Ve bu nesne ticaret işlemlerinin yürütülmesine hizmet eder. Ve tüm program için bir nesne yapmak hiç de gerekli değildir ve başlatma sırasında ayarlanan sihir, kayma ve diğer parametreleri her değiştirmeniz gerektiğinde, bunları tekrar sıfırlayın. İşlem gören sembollerin her biri için kendi işlem nesnenizi oluşturabilir, CTrade sınıfının bu belirli nesnesinin ait olduğu sembolün özelliklerine göre gerekli parametreleri ayarlayabilir ve istediğiniz nesneye bir işaretçi alarak sakince ticaret yapabilirsiniz. Belirlenen seçenekleri geçersiz kılmadan, istenen sembolden istenen ticaret sınıfının.
Veya farklı bir sihirbazla çalışmak için uygun ayarlarla ayrı bir ticaret nesnesi belirleyebilirsiniz. Sonuçta, bir Uzman Danışmanda birkaç sihirbaz olabilir.

Her şey neyi ve nasıl kullandığımızı anlamaya bağlıdır.

Bu durumda, bu

SetExpertMagicNumber
Устанавливает идентификатор эксперта

yanlış açıklama?

Bir uzman için ayarlanmışsa, o zaman herhangi bir emir/pozisyonun bu sihire sahip olması gerektiğini anladım. (((