MQL5'te OOP hakkında sorular - sayfa 73

 
Igor Makanu :

uygun iletişim düzeyine inmek: konuyla ilgili sorum? Neden internetten resimlerinle buraya girdin? cevabı biliyor musun? - hayır, otur ve sus ;)

Birincisi - dürtme ve ikincisi - gerçeğe bu kadar şiddetli tepki verecek hiçbir şey yok.
Dürüst olmak gerekirse, bugünün muhatabınızdan çok uzak değilsiniz:

MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma

Igor Makanu , 2020.06.07 13:46

Carcass77 Herkese merhaba. Kod içine String türünde bir değişken eklemeye yardımcı olun. teşekkürler

Kendi sorunuza cevap verebilecek misiniz?
ya da bir yerde bir kod parçası gördüler ve kullanamadılar mı? ve neler olduğunu anlamak zorundasın
......
ama bence bu yol değil

 

Kötü şöhretli bir tür moderatör, müstehcen cevaba provokasyon yasağı göndermeye söz verdi :-)

Bekle...

 
Bazıları daha çok, bazıları daha az biliyor. Forum - iletişim ve sorular ve cevaplar için.
Bilgiyi zenginleştirmek için soru sormaktan utanmayın. Soru soranlara karşı alçakgönüllü davranmak utanç verici - bu, bir sonraki derse geçen ve "kutsal bilgiyi dudaklarından" yayınlayan bir öğrencinin seviyesidir. Genel olarak bilgi...
 
Maxim Kuznetsov :

Kötü şöhretli bir tür moderatör, müstehcen cevaba provokasyon yasağı göndermeye söz verdi :-)

Bekle...

beni kızdırmak zor ve ordudaki tüm küfürleri söylemeyi başardım, onlarsız olmaz)))

 
Maxim Kuznetsov :

Kötü şöhretli bir tür moderatör, müstehcen cevaba provokasyon yasağı göndermeye söz verdi :-)

Bekle...

Hayır, Max, değil. Lütfen açık bir zihinle okuyun.
 
#include <JSON\json.mqh>

JSONObject * getJSONObject( const string json)
{
   JSONValue *jv =((JSONParser *)( new JSONParser())).parse(json);   //1
   if (jv != NULL && jv.isObject()) return ((JSONObject *)jv);       //2
   Print ( __FUNCSIG__ + "parser error, json = " ,json);
   delete jv;                                                       //3
   return ( NULL );
}
void OnStart ()
{
   JSONObject *jobj = getJSONObject( "{\"ObjType\":2,\"m_period\":1}" );
   if(jobj!=NULL) Print("m_period = ", jobj.getInt("m_period"));    
   delete jobj;                                                     //3
}


1. Yeni aracılığıyla oluşturulan JSONParser nesnesi için silme yok
JSONParser* 'da anlamsız döküm
Yerel JSONParser değişkenini neden sevmiyorsunuz? Yoksa geçici bir nesne kullanmak istediniz ama imzasını bilmiyor musunuz?

2. JSONObject* içinde anlamsız döküm
3. jv ve jobj değişkenlerinin NULL olmayacağından emin misiniz? Aksi takdirde, MQL'de bir boş göstericinin silinmesi, günlüğe "çöp" yazdıracaktır.

 
Sergey Dzyublik :


1. Yeni aracılığıyla oluşturulan JSONParser nesnesi için silme yok
JSONParser* 'da anlamsız döküm
Yerel JSONParser değişkenini neden sevmiyorsunuz? Yoksa geçici bir nesne kullanmak istediniz ancak imzasını bilmiyor musunuz?

2. JSONObject* içinde anlamsız döküm
3. jv ve jobj değişkenlerinin NULL olmayacağından emin misiniz? Aksi takdirde, MQL'de bir boş göstericinin silinmesi, günlüğe "çöp" yazdıracaktır.

teşekkürler, bu bir şey

anlamsız uygulanabilir değil, bu yöntem kitaplığın yazarı tarafından kullanıldı, yine de ayrıştırma çağrılarını başka bir şekilde yazmak için hiçbir neden göremiyorum


MQL ile, işaretçilerle çalışırken durum net değildir - işaretçi bir varlık haline geldiğinde ve işaretçi bir nesneye işaret ettiğinde, şeytan bacağını kıracaktır (((

Not: 20 yıl önce C++ öğrettim, gelecekte üretimde mühendisler için nadiren kullanılıyor, ilk başta neredeyse herkes Delphi'ye oturdu, sonra kontrolörler için Sharp'a sürünerek C++'ın nerede olacağını da görmedim uygulanabilir olsun, her şey özel bir yazılım üzerinde çalışır - görünüşe göre üniversitelerin teknik uzmanlık öğrencileri için damgası - her zaman Pascal ile eğitime başlarlar, Volgograd Politeknik Üniversitesi'nde bile turbo-paska okurlar ... derleyicilerin nereye götürüldüğünü kim bilir ))))


Not: holivarı çıkarın, boyamaz, genellikle tam tersi

 
Igor Makanu :

teşekkürler, bu bir şey

anlamsız uygulanabilir değil, bu yöntem kitaplığın yazarı tarafından kullanıldı, yine de ayrıştırma çağrılarını başka bir şekilde yazmak için hiçbir neden göremiyorum


MQL ile, işaretçilerle çalışırken durum net değildir - işaretçi bir varlık haline geldiğinde ve işaretçi bir nesneye işaret ettiğinde, şeytan bacağını kıracaktır (((

Not: 20 yıl önce C++ öğrettim, gelecekte üretimde mühendisler için nadiren kullanılıyor, ilk başta neredeyse herkes Delphi'ye oturdu, sonra kontrolörler için Sharp'a sürünerek C++'ın nerede olacağını da görmedim uygulanabilir olsun, her şey özel bir yazılım üzerinde çalışır - görünüşe göre üniversitelerin teknik uzmanlık öğrencileri için damgası - her zaman Pascal ile eğitime başlarlar, Volgograd Politeknik Üniversitesi'nde bile turbo-pascal okurlar ... derleyicilerin nereye götürüldüğünü kim bilir ))))


Not: holivarı çıkarın, boyamaz, genellikle tam tersi

Evet, burada işaretçiler yok) Sınıf için bir tutamaç var, ancak onunla çalışmak bir işaretçi ile çalışmaya benzer, ancak bu, her şeyin ortak bittiği yerdir.

Şimdi vurgu için:

  • Yığın üzerinde veya öbek üzerinde bir nesne oluşturursunuz.
    CTest test;             //test - object
    CTest* test= new CTest;   //test - handle of object
    , kapsamdan çıkarken, ilk durumda, derleyici örtük olarak yıkıcıya bir çağrı ekler, hiçbir bellek temizlenmezken, yalnızca yığın işaretçisiişlev çağrısından önceki konuma döndürülür. İkinci durumda, kapsamdan çıkarken, nesne tarafından işgal edilen bellek, bellek yöneticisi için işgal edilmiş olarak işaretlenir ve hiçbir işaretçi onu göstermediğinden, serbest bırakılamaz (buna bellek sızıntısı denir), bu nedenle gereklidir. nesneyi silme yoluyla açıkça yok etmek için.
  • Yerel çalışma zamanı gelince. Burada tanıtıcı, özellikle onun için aşırı yüklenmiş bir işlev yoksa, dolaylı olarak başvurudan çıkarılır, örneğin:
     class CTest{
    };
    
    void OnStart ()
      {
       CTest test;
       CTest* _test= new CTest;
       Test(test);
       Test(&test);
       Test(_test);
       _Test(_test);
       delete _test;
      }
      
    void Test(CTest &test){ Print ( "Object" );}
    void Test(CTest* test){ Print ( "Handle" );}
    void _Test(CTest &test) { Print ( "Ok" );}
    not. Evet, keskinliği unutuyorsun, ortak hiçbir şey yok)))
 

Vladimir Simakov :

not. Evet, keskinliği unutuyorsun, ortak hiçbir şey yok)))

işe yaramaz, çabucak iyiye alışırsınız, orada her şey mantıklı, eğer bir yeri karıştırırsanız - VS size hemen söyleyecektir ve kodu çalıştırırken - fonksiyon gövdesinden ayrıldınız - sadece unuttunuz, peki , oluşturduğunuz maksimum değere NULL atanır - kendiniz kaldıracaktır))

teşekkürler, bunu düşüneceğim

 
Igor Makanu :

işe yaramaz, çabucak iyiye alışırsınız, orada her şey mantıklı, eğer bir yeri karıştırırsanız - VS size hemen söyleyecektir ve kodu çalıştırırken - fonksiyon gövdesinden ayrıldınız - sadece unuttunuz, peki , oluşturduğunuz maksimum değere NULL atanır - kendiniz kaldıracaktır))

teşekkürler, bunu düşüneceğim

Evet, bir nesneye yalnızca bir üzücü örtük referans, kodun vahşi doğasında hayatta kaldı (örneğin, bir delegenin çağırma sayfasında bir yöntemi çağırmak) ve yola çıktı, bellek aktı. Sharpe'de ayrıca bir veya ikiye bölün.