Hatalar, hatalar, sorular - sayfa 1135

 
Fleder :
Lütfen tüm kodunuzu gönderin.
Bu, mql5 belgelerine bir örnektir. İşte o sayfaya bir bağlantı . Ve kod aşağıdadır.
 //+------------------------------------------------------------------+
//| Класс с конструктором по умолчанию                               |
//+------------------------------------------------------------------+
class CFoo
  {
   datetime           m_call_time;     // время последнего обращения к объекту
public :
   //--- конструктор с параметром, имеющем значение по умолчанию, не является конструктором по умолчанию
                     CFoo( const datetime t= 0 ){m_call_time=t;};
   //--- конструктор копирования 
                     CFoo( const CFoo &foo){m_call_time=foo.m_call_time;};
 
   string ToString(){ return ( TimeToString (m_call_time, TIME_DATE | TIME_SECONDS ));};
  };
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
// CFoo foo; // такой вариант использовать нельзя - конструктор по умолчанию не задан
//--- допустимые варианты создания объекта CFoo
   CFoo foo1( TimeCurrent ());     // явный вызов параметрического конструктора
   CFoo foo2();                   // явный вызов параметрического конструктора с параметром по умолчанию
   CFoo foo3= D'2009.09.09' ;       // неявный вызов параметрического конструктора
   CFoo foo40(foo1);             // явный вызов конструктора копирования
   CFoo foo41=foo1;               // неявный вызов конструктора копирования
   CFoo foo5;                     // явный вызов конструктора по умолчанию (если конструктор по умолчанию отсутствует,
                                 // то вызывается параметрический конструктор с параметром по умолчанию)
//--- допустимые варианты получения указателей CFoo
   CFoo *pfoo6= new CFoo();       // динамическое создание объекта и получение указателя на него
   CFoo *pfoo7= new CFoo( TimeCurrent ()); // ещё один вариант динамического создания объекта
   CFoo *pfoo8= GetPointer (foo1); // теперь pfoo8 указывает на объект foo1
   CFoo *pfoo9=pfoo7;             // pfoo9 и pfoo7 указывают на один и тот же объект
   // CFoo foo_array[3];         // такой вариант использовать нельзя - конструктор по умолчанию не задан
//--- выведем значения m_call_time
   Print ( "foo1.m_call_time=" ,foo1.ToString());
   Print ( "foo2.m_call_time=" ,foo2.ToString());
   Print ( "foo3.m_call_time=" ,foo3.ToString());
   Print ( "foo4.m_call_time=" ,foo4.ToString());
   Print ( "foo5.m_call_time=" ,foo5.ToString());
   Print ( "pfoo6.m_call_time=" ,pfoo6.ToString());
   Print ( "pfoo7.m_call_time=" ,pfoo7.ToString());
   Print ( "pfoo8.m_call_time=" ,pfoo8.ToString());
   Print ( "pfoo9.m_call_time=" ,pfoo9.ToString());
//--- удалим динамически созданные объекты
   delete pfoo6;
   delete pfoo7;
   //delete pfoo8;  // удалять pfoo8 явно не нужно, так как он указывает на автоматически созданный объект foo1
   //delete pfoo9;  // удалять pfoo9 явно не нужно, так как он указывает на тот же объект, что и pfoo7
  }
 
Tron_KZ :
Bu, mql5 belgelerine bir örnektir. İşte o sayfaya bir bağlantı . Ve kod aşağıdadır.

Görünüşe göre güncelleme, yalnızca statik sınıf veri üyelerinin zorunlu olarak yerleştirilmesini değil,

ama aynı zamanda parametrik kurucunun örtük çağrısını da iptal etti.

Açık bir çağrı kullanın:

   CFoo foo1( TimeCurrent ());     // явный вызов параметрического конструктора
   CFoo foo2();                   // явный вызов параметрического конструктора с параметром по умолчанию
   CFoo foo3( D'2009.09.09' );     // явный вызов параметрического конструктора
   CFoo foo4(foo1);              // явный вызов конструктора копирования
   CFoo foo5;                     // явный вызов конструктора по умолчанию (если конструктор по умолчанию отсутствует,
                                 // то вызывается параметрический конструктор с параметром по умолчанию)
 
Const olmayan nesnelerin const nesnelere dönüştürülmesi hangi temelde iptal edildi? Yüzlerce dahili yöntem benim için çalışmayı durdurdu, çünkü bunlar const değiller ve görücüler artık const nesnelerinde kullanılamaz. Yüzlerce işlevim CObject.Compare(...) sabitine bağlı ve şimdi hepsi çalışmıyor!
 
Görünüşe göre mql5'teki OOP belirli değişikliklerden geçmiş. Sessizlikte...
 
C-4 :
Const olmayan nesnelerin const nesnelere dönüştürülmesi hangi temelde iptal edildi?

Her şey yolunda gidiyor - hata veya uyarı yok

 class A {};
void f( const A& a ) {}
void OnStart ()
{
        A a; //не const A
        f( a );
}
Kalan herhangi bir hata varsa, o zaman yalnızca yapıdadır, ancak sonunda onlara ulaşacaktır.
 
A100 :

Her şey hatasız veya uyarısız derlenir.

"A" sabit olmayan bir yöntem içeriyorsa, ancak kendisi işleve bir const nesnesi olarak iletiliyorsa, bu sabit olmayan yöntemi işlevde çağırmak artık mümkün değildir.

 class A 
{
   public :
       void PrintMyName(){ printf ( "my name A" );}
};

void f( const A* a)
{
   a.PrintMyName(); //Хренушки. Теперь PrintMyName должен быть константым.
} 

void OnStart ()
{
        A a; //не const A
        f( GetPointer (a));
}

Ve şimdi soruya dikkat edin: hadi CObject'in imzasını silelim. karşılaştırmak():

 virtual int   Compare(
   CObject const *  node,       // элемент 
   int             mode= 0        // вариант 
   ) const
TAMAM. bu, bir const düğüm nesnesini kabul eden bir const yöntemidir. Düğüm sabiti bildirmek onun hakkıdır. Ancak Şimdi Karşılaştır hangi temelde yalnızca düğümün sabit yöntemleriyle çalışmalı? Karşılaştırma için düğümün const yöntemlerine sahip olması gerekmez. Ancak, yalnızca nesnenin karmaşık olduğu ve sabit yöntemleri olmadığı gerekçesiyle, şimdi tüm sonuçlarıyla standart kitaplığı kullanamayacağı ortaya çıktı !!!

 
mql5 :
Şimdi statik üyeler yerleştirilmelidir.

Statik yapıcılar yasaklanmışsa, karmaşık statik nesneleri yerleştirmeyi nasıl sipariş edersiniz?

 class A 
{
   public :
       void PrintMyName(){ printf ( "my name A" );}
};

class B
{
   public :
      static A* a; //В этом месте как прикажете объект инициализировать? 
};
 
C-4 :

"A" sabit olmayan bir yöntem içeriyorsa, ancak kendisi işleve bir const nesnesi olarak iletiliyorsa, bu sabit olmayan yöntemi işlevde çağırmak artık mümkün değildir.

Doğru, öyle olmalı, yoksa belirtmenin ne anlamı var?

 void f( const A* a)

Ama değil

 void f(A* a)
 
C-4 :

"A" sabit olmayan bir yöntem içeriyorsa, ancak kendisi işleve bir const nesnesi olarak iletiliyorsa, bu sabit olmayan yöntemi işlevde çağırmak artık mümkün değildir.

Umm, bu aslında Feng Shui.
 
C-4 :

Statik yapıcılar yasaklanmışsa, karmaşık statik nesnelerin yerleşimini nasıl sipariş edersiniz?

 class A 
{
   public :
       void PrintMyName(){ printf ( "my name A" );}
};

class B
{
   public :
       static A* a;
};

A* B::a = new A;
Neden: