MQL5'te OOP hakkında sorular - sayfa 5

 
 
Vladimir Simakov :
Haydi! Her zaman kullandığım şey bu.

Neresi? Nerede ve nasıl?

Moderatörler, soruyu tekrarladığım için özür dilerim. Gerçekten buna bir cevap almak istiyorum.

 
Artyom Trishkin :

Ve neden işleve iletilen işaretçiyi bilerek yeniden atadınız? Elbette bir sızıntı olacaktır. Ancak bu "klasik bir sızıntı" değil, bir nesneye işaretçi ile çalışmanın klasik bir hatasıdır.

Burada yeni bir nesne oluşturmanız gerekmez, ancak işleve geçirilen işaretçi olan harici bir nesne ile çalışmanız gerekir.

O ben değilim. Bu konudaki başka birinin kodundan alınmıştır. Örnek olarak alınmıştır.
 
Dmitry Fedoseev :

Neresi? Nerede ve nasıl?

Moderatörler, soruyu tekrarladığım için özür dilerim. Gerçekten buna bir cevap almak istiyorum.

Sabırlı ol. Eve geleceğim, atacağım.
 
Dmitry Fedoseev :

Neresi? Nerede ve nasıl?

Moderatörler, soruyu tekrarladığım için özür dilerim. Gerçekten buna bir cevap almak istiyorum.

Soruyu doğru anlarsam, sınıfı new kullanarak bir nesne olarak bildiririz.
Ayrıca, oluşturulan nesne aracılığıyla bir nokta kullanarak sınıfın genel yöntemlerini çağırırız.
Çağrılan tüm metotları çalıştırdıktan sonra oluşturulan silme nesnesini silerek hafızayı temizliyoruz.

 
Roman :

Soruyu doğru anlarsam, sınıfı new kullanarak bir nesne olarak bildiririz.
Ayrıca, oluşturulan nesne aracılığıyla bir nokta kullanarak sınıfın genel yöntemlerini çağırırız.
Çağrılan tüm metotları çalıştırdıktan sonra oluşturulan silme nesnesini silerek hafızayı temizliyoruz.

Değil. İlk başta bunun böyle bir fonksiyon parametresi olduğunu düşündüm - bir nesne, ancak referans olarak değil, sonunda noktalı virgülle. Bu, beyan sırasında bir nesnenin olağan yaratımıysa, neden parantez içinde? Bu nedenle, yüzyılın bir gizemi olmaya devam ediyor.

 
Dmitry Fedoseev :

Değil. İlk başta bunun böyle bir fonksiyon parametresi olduğunu düşündüm - bir nesne, ancak referans olarak değil, sonunda noktalı virgülle. Bu, beyan sırasında bir nesnenin olağan yaratımıysa, neden parantez içinde? Bu nedenle, yüzyılın bir gizemi olmaya devam ediyor.

Parantez içinde - çünkü bu metin üzerinde bir not))))
 
Artyom Trishkin :

Ve neden işleve iletilen işaretçiyi bilerek yeniden atadınız? Elbette bir sızıntı olacaktır. Ancak bu "klasik bir sızıntı" değil, bir nesneye işaretçi ile çalışmanın klasik bir hatasıdır.

Burada yeni bir nesne oluşturmanız gerekmez, ancak işleve geçirilen işaretçi olan harici bir nesne ile çalışmanız gerekir.

Evet, bu benim örneğim değil, ancak MQL'de işaretçilerin kendilerinin uygulanması - referanslarının kaldırılması gerekmez (ve işaretçi bir nesne örneğine de atanabilir!), sonra işaretçiyi geçmek yerine, bir nesneye bağlantı https://www.mql5.com/ en/forum/1111/page2471#comment_11796665

o zaman (CObj & obj) nerede ve ne zaman ortaya çıktığı hakkında hiçbir bilgi yoktur (ayrıca &, bir işaretçiyi yeniden adlandırmak için bir işlem değil, bir işaretçi GetPointer() almak için bir işlemdir)

tamam, boştan boşa gitmek istemiyorum... Kendime zaten söyledim ve forumda tekrar edeceğim - MQL C++ değil, nokta! çok uygulandı - peki, seçenek yok

 
Igor Makanu :

Evet, bu benim örneğim değil, ancak MQL'de işaretçilerin kendilerinin uygulanması - referanslarının kaldırılması gerekmez (ve işaretçi bir nesne örneğine de atanabilir!), sonra işaretçiyi geçmek yerine, bir nesneye bağlantı https://www.mql5.com/ en/forum/1111/page2471#comment_11796665

o zaman (CObj & obj) nerede ve ne zaman ortaya çıktığı hakkında hiçbir bilgi yoktur (ayrıca &, bir işaretçiyi yeniden adlandırmak için bir işlem değil, bir işaretçi GetPointer() almak için bir işlemdir)

tamam, boştan boşa gitmek istemiyorum... Kendime zaten söyledim ve forumda tekrar edeceğim - MQL C++ değil, nokta! çok uygulandı - peki, seçenek yok

Bir şeyi dramatize ediyorsunuz, burada zorluk ve anlaşılmazlık yok.

 
Vladimir Simakov :
Parantez içinde - çünkü bu metin üzerinde bir not))))

İşte burada.

Bunun gibi:

 void z(CObj * o){
}

bu sadece mümkün değil, daha da iyisi, çünkü şöyle adlandırabilirsiniz:

CObj obj;
z( GetPointer (obj));

Bir işaretçiyi referans olarak iletirseniz, işaretçi için bir değişkene daha ihtiyacınız olacaktır.

***

Ve fonksiyonda bir nesne yaratmak için fonksiyona bir işaretçi iletmeniz gerekiyorsa, şu şekilde çalışır:

 class CObj{
   public :
   int f(){
       return ( 33 );
   }
};

CObj * obj;

void OnStart (){
  z(obj);
  delete(obj);
}

void z(CObj & o){
   o = new CObj();
}
Bu aslında OOP hakkında bilmek istediğiniz, ancak sormaya korktuğunuz her şey)))