OOP - sayfa 8

 

İşlev parametrelerinde bir referans nasıl döndürülür?

Bu kod sorunlara neden olur:

CMy* obj; // global
bool func(CMy* obj)
{
...
  obj = new CMy();
...
}

Obj ile daha sonra çalışmaya çalışırken geçersiz işaretçi erişimi.

& eklemeye çalıştım.

 bool func(CMy* & obj)

İşte böyle çalışır. Dokümantasyondaki fonksiyon parametrelerinde bir referansın dönüşünü bulamadım.

C ++ ile benzetme yaparak şu konuyu buldum: http://stackoverflow.com/questions/5286453/returning-a-pointer-as-a-function-parameter

Ama ** sizin için çalışmıyor. *& onun yerine?

5.00.630x64

returning a pointer as a function parameter
returning a pointer as a function parameter
  • stackoverflow.com
Im trying to return the data pointer from the function parameter: bool dosomething(char *data){ int datasize = 100; data = (char *)malloc(datasize); // here data address = 10968998
 
flops :

Dokümantasyondaki fonksiyon parametrelerinde bir referansın dönüşünü bulamadım.

Bundan bahsediyorsunuz: MQL5 Referansı / Dil Temelleri / Veri Tipleri / Bağlantılar. & değiştiricisi ve this anahtar sözcüğü ?
 
flops :

İşlev parametrelerinde bir referans nasıl döndürülür?

Bu kod sorunlara neden olur:

Obj ile daha sonra çalışmaya çalışırken geçersiz işaretçi erişimi.

& eklemeye çalıştım.

İşte böyle çalışır. Dokümantasyondaki fonksiyon parametrelerinde bir referansın dönüşünü bulamadım.

C ++ ile benzetme yaparak şu konuyu buldum: http://stackoverflow.com/questions/5286453/returning-a-pointer-as-a-function-parameter

Ama ** sizin için çalışmıyor. *& onun yerine?

5.00.630x64

IMHO (uzun zaman önce)

Bir işaretçiyi argümanlardan geçiremezsiniz, bir bağlantı oluşturabilirsiniz. Bir sınıfın yeni bir örneğini bir referansa bağlayamazsınız. Bu seçeneği bırakır:

CMy* func()
{
...
  CMy* obj;
  obj = new CMy();
   return (obj);
...
}
 
Vigor :

OOP'nin destekçisiyim çünkü kendim için aşağıdan yukarıya programlamanın rahatlığını anladım. Nesne etkileşim arayüzlerinden sınıf uygulamalarına.

Bir sınıfa harici bir arayüz değil mi?
 
220Volt :

IMHO (uzun zaman önce)

Bir işaretçiyi argümanlardan geçiremezsiniz, bir bağlantı oluşturabilirsiniz. Bir sınıfın yeni bir örneğini bir referansa bağlayamazsınız. Bu seçeneği bırakır:

soruyu yanlış yazmışım

Referansa göre bir işaretçi geçirme . Varyantı *& ile kullanmanın mümkün olup olmadığını merak ediyorum, gelecek sürümlerde kapsayacaklar mı? C++'da böyle bir yapı yasal görünüyor.

 
Yedelkin :
Bundan bahsediyorsunuz: MQL5 Referansı / Dil Temelleri / Veri Tipleri / Bağlantılar. & değiştiricisi ve this anahtar sözcüğü ?

Keşke biraz bilgi olsaydı...


Makalede

https://www.mql5.com/ru/docs/basis/function/ParameterPass

Ayrıca nesnelerle çalışma hakkında bilgi ekleyebilirsiniz.

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
 
Andrei01 :
Bir sınıfa harici bir arayüz değil mi?

Ve nesneler için neyi değiştirir? Bu yorumdaki arayüz bir veri türüdür, çünkü açıklaması nesnelerin özelliklerini açıkça tanımlar. Ve aslında, nesnelerin dış davranışlarını belirler.

Alıntıladığım materyallerde, OOP karşıtları, algoritmayı uygulamadan hemen sonuna kadar bir sınıf yapısı oluşturmanın imkansız olduğunu, bu nedenle yeniden düzenlemenin OOP ortamında bu kadar sık uygulandığını ve bu nedenle sınıfların sonsuz yeniden çalışmaları ile gelişimi yavaşlattığını belirttiler. . Ve gerçekten öyle. Yeni bir şey uygulamak ve bunun neyle sonuçlanabileceğini anlamamak, sınıfların bir kereden fazla yeniden yapılması gerekecek.

İyi bir sınıf mimarisi oluşturmak, yeni başlayanlar için bir engeldir. Aslında, OOP programlamanın anlamı, gelecekte yaratmanın uygun ve hızlı olduğu kendi " dilinizi " yazmaktır. Arayüz, görev için tasarlanan dilin özüdür. Arayüz, kesinlikle, bir sınıf "tipi" yapısı olarak, kodda yürütülmesi gereken bir sınıf için bir sözleşme olarak anlaşılmamalıdır (MQL'de mevcut değildir ve sanal yöntemler, bir arabirim rolünü oynayabilir. bir streç).

Örneğin, yeni Uzman Danışmanlar oluşturmak için bir "dil" oluşturabilirsiniz; bu, birkaç satırdaki nesnelerden Uzman Danışmanın genel bir şemasını oluşturmanıza olanak tanır. Hazır sinyal ve koşulları kullanabilir veya durumdan duruma, benzetme yaparak kendi sinyal sınıflarınızı geliştirebilir ve kendi kütüphanenizi oluşturabilirsiniz. Bu fırsat MQL5 Sihirbazı tarafından sağlanmaktadır.

Çoğu zaman, bir uygulama oluşturma şeması zaten icat edilmiştir ve "OOP programlama" esasen, kendi işlevselliğinizi yazmak için sınırlı serbestlik derecesine sahip mevcut sınıfları kullanmaktan ibarettir - bu uygundur. Bu yüzden çerçeveler çok popüler. Bir uygulama mimarisi geliştirirken sizi gereksiz sorunlardan ve baş ağrılarından kurtarırlar. Aslında, kendinize ait bir şey yazmak, çerçeve sınıflarından birine bir sınıf mirasçısı oluşturmak ve genel uygulama mantığında halihazırda yerleşik olan belirli geri çağırma yöntemlerinin bir uygulamasını bunun içinde yazmaktır (OnInit, OnTick bunun örnekleridir).

 
Vigor :

...

İyi bir sınıf mimarisi oluşturmak, yeni başlayanlar için bir engeldir. Aslında, OOP programlamanın anlamı, gelecekte yaratmanın uygun ve hızlı olduğu kendi " dilinizi " yazmaktır. Arayüz, görev için tasarlanan dilin özüdür. Arayüz, kesinlikle, bir sınıf "tipi" yapısı olarak, kodda yürütülmesi gereken bir sınıf için bir sözleşme olarak anlaşılmamalıdır (MQL'de mevcut değildir ve sanal yöntemler, bir arabirim rolünü oynayabilir. bir streç).

...

Aksine, OOP'nin amacı kendi mimarisini yazmaktır. Açık, net, sezgisel bir mimariye sahip olduğumuz anda, her şey hemen yerine oturur ve ne projenin karmaşıklığı ne de hacmi artık caydırıcı faktörlerdir. Bununla birlikte, bu çok net mimariyi elde etmek için, başlangıçta belirsiz olan bu ideale yavaş yavaş yaklaşarak, sınıfları tekrar tekrar yazmak gerekir.
 
C-4 :
Aksine, OOP'nin amacı kendi mimarisini yazmaktır. Açık, net, sezgisel bir mimariye sahip olduğumuz anda, her şey hemen yerine oturur ve ne projenin karmaşıklığı ne de hacmi artık caydırıcı faktörlerdir. Bununla birlikte, bu çok net mimariyi elde etmek için, başlangıçta belirsiz olan bu ideale yavaş yavaş yaklaşarak, sınıfları tekrar tekrar yazmak gerekir.
+1