MQL5'te OOP hakkında sorular - sayfa 12

 
Vasiliy Pushkaryov :

Bana bir soru daha söyle. CButton'dan bir CMyButton alt sınıfı oluşturursanız, bir düğme oluşturabilir ve ardından özelliklerini sınıfın dışında değiştirebilirsiniz. Bu, aşağıdaki OnInit() içinde yapılır.

Ancak, alt sınıf içinde ek alanlar oluşturmak ve CButton sınıfının yerleşik özelliklerini yeni işlevlerde kullanmak istersem, bunu nasıl doğru şekilde uygulayabilirim?

CButton sınıfında, m_button sınıfının üyesi özel bölümde bildirilir.

Ebeveyn sınıfının özel bölümüne girmek imkansızdır.

Belki basit ve basittir - CButton sınıfında bir grafik nesnesinin adının nasıl oluşturulduğuna bakın ve doğrudan bu grafik nesnelerle çalışın. Özellikle bir düğme ile basit olmalı, sadece bir grafik nesnesi var.

 
TheXpert :

Evet, alakasız iki kişi zaten kodunuzun çökmesini Photoshopluyor)

Kodunuz düzgün çalışmıyor, kodun kendisinden belli oluyor))

İki insan? Senin fantezinden, değil mi? En azından daha dikkatli okuyun veya en azından resimlere daha dikkatli bakın. İlkinde hata ayıklayıcıdan bir mesaj var. Ve bir hata ayıklayıcı olmadan derler ve çalışır.

 
Dmitry Fedoseev :

İki insan? Senin fantezinden, değil mi? En azından daha dikkatli okuyun veya en azından resimlere daha dikkatli bakın. İlkinde hata ayıklayıcıdan bir mesaj var. Ve bir hata ayıklayıcı olmadan derler ve çalışır.

Hata ayıklayıcı olmadan çöküyorum)

ve hata ayıklayıcıda çöküyor))

belki de komut dosyası çıktı günlüğüne nereye bakacağınızı bilmiyorsunuzdur? )))

 
TheXpert :

Hata ayıklayıcı olmadan çöküyorum)

ve hata ayıklayıcıda çöküyor))

belki de komut dosyası çıktı günlüğüne nereye bakacağınızı bilmiyorsunuzdur? )))

Hayır, bilmiyorum ama nerede olduğunu söyle.

 
Vasiliy Pushkaryov :

Bana bir soru daha söyle. CButton'dan bir CMyButton alt sınıfı oluşturursanız, bir düğme oluşturabilir ve ardından özelliklerini sınıfın dışında değiştirebilirsiniz. Bu, aşağıdaki OnInit() içinde yapılır.

Ancak, alt sınıf içinde ek alanlar oluşturmak ve CButton sınıfının yerleşik özelliklerini yeni işlevlerde kullanmak istersem, bunu nasıl doğru şekilde uygulayabilirim?

CButton sınıfında, m_button sınıfının üyesi özel bölümde bildirilir.

bence yine sorununuzu kuyruk tarafından çözüyorsunuz, diğer taraftan yine de bu sorunu çözmenizi tavsiye ederim:

 class CMyButton : public CButton
{ 
   private : 
   CButton        *mybtn;
   public : 
              CMyButton( void ){}; 
             ~CMyButton( void ){}; 
             
         bool     isPrevState;         // состояние кнопки на предыд.тике, true - была нажата     
         void     setButton();         // создаем кнопку
         void     setProp();           // задаем в ходе программы свойства
}; 

void CMyButton::setButton( void )
{
  mybtn = new CButton;
  mybtn.Create(....................);
   // как в этой функции создать кнопку? Я не могу вызвать метод Create()


Dmitry Fedoseev :

Ebeveyn sınıfının özel bölümüne girmek imkansızdır.

en azından #define ile girebilirsiniz ve dynamic_cast ile deney yapabilirsiniz, geçen yıl dynamic_cast'in olanaklarını inceledim - harika şeyler yapmanızı sağlar, ancak bu zahmetli bir süreçtir


TheXpert :

Hata ayıklayıcı olmadan çöküyorum)

kontrol edildi - Ben de aldım: 2019.07.05 17:10:27.307 1 (EURUSD,H1) '1.mq5' içinde geçersiz işaretçi erişimi (43,6)

 

İlgimi çektin ve düşündüm ki, belki de gerçekten aptal olduğumu düşünüyorsun. 5 yıl önce yazdığım kodu çıkardım, işte bir parça:

Öyleyse devam edebilirsin... seninkini buraya serpebilirsin... istediğin kadar... ve benim bir aptal olduğumu hayal etmek imkansız, ama şimdilik tam tersi. Çılgın şeytanlar gibi etrafta zıplarsın ve her şey işe yaramaz.

***

Evet ve kodumla, derlenmesine ve çalışmasına rağmen, bir şeylerin yanlış olduğu çabucak ortaya çıkıyor. Nesne silme yoluyla silinmez.

Ama ne olduğunu bile bilmediğime inanmaktan memnunsun: CObj obj; İnanmaya devam et...

***

Ama kulaklarını "büyükbabaya kötülük için" topuklarına kadar dondurmaya hazırlar. MQL'de çöp toplayıcıları bile var.

 
Dmitry Fedoseev :

İlgimi çektin ve düşündüm ki, belki gerçekten bir aptalım, sen de öyle olduğumu düşünüyorsun. 5 yıl önce yazdığım kodu çıkardım, işte bir parça:

Öyleyse devam edebilirsin... seninkini buraya serpebilirsin... istediğin kadar... ve benim bir aptal olduğumu hayal etmek imkansız, ama şimdilik tam tersi.

Burada her şey doğru, bir işaretçiye bir bağlantı ve bir tanesi, çünkü tüm yaygara, nesneye olan bağlantı değil. Koda dikkatlice bakın.
 
Vladimir Simakov :
Burada her şey doğru, bir işaretçiye bir bağlantı ve bir tanesi, çünkü tüm yaygara, nesneye olan bağlantı değil. Koda dikkatlice bakın.

Bunu bir yerde * ve başka bir yerde * & fark edemeyeceğimi gerçekten düşünüyor musunuz?

Ayrıca CObj nesnenin ne olduğunu bilmediğimi de düşünüyorsunuz; ?

 
Vladimir Simakov :
...var olmayan bir nesneye gönderme..

Ama derler ve çalışır.

 
Dmitry Fedoseev :

Bunu bir yerde * ve başka bir yerde * & fark edemeyeceğimi gerçekten düşünüyor musunuz?

Ayrıca CObj nesnenin ne olduğunu bilmediğimi de düşünüyorsunuz; ?

Başardın
 void z(CObj & o){
   o = new CObj();
}