Gespräche über die PLO in der Lounge - Seite 15

 
Vladimir Pastushak:

Wohin geht die Reise?


Prüfen Sie Ihre Post.

 

Hallo, Moderatoren! Ich habe eine ganz normale Frage gestellt, auf die ich unhöflich reagiert habe. Wenn Sie sie verreißen, verreißen Sie auch die Betreiber und den Unsinn mit den Hinweisen.

Und lassen Sie Sokolov auf keinen Fall in OOP-Themen auftauchen, bei solchen Befürwortern von OOP im Forum wird er qualvoll sterben.

 
Комбинатор:

Hallo, Moderatoren! Ich habe eine normale Frage gestellt, auf die ich unhöflich reagiert habe. Wenn Sie sie also niedermachen, sollten Sie auch den Unsinn über die Betreiber und die Wegweiser niedermachen.

Und lassen Sie Sokolov gar nicht erst in OOP-Themen auftauchen, mit solchen Verfechtern von OOP wird das Forum qualvoll aussterben.

Haben Sie irgendetwas über Ihren Standpunkt geklärt? Nein.
Ich habe eine einfache Streitigkeit gelöscht.
 

Ein gutes Beispiel für das Thema OOP.

Graphics editor MT4
Graphics editor MT4
  • 2018.01.15
  • Evgeniy Serov
  • www.mql5.com
Утилита Graphics editor MT4 предназначена для создания и редактирования графических объектов типа: Удобный и интуитивно понятный интерфейс позволяет быстро и эффективно редактировать основные параметры графических объектов и сразу же видеть результат изменений. Входные параметры Languages - русский/английский; base_corner - угол привязки...
 
Artyom Trishkin:
Haben Sie irgendetwas über Ihren Standpunkt geklärt? Nein.
Was sollte ich mit einer Frage mit zwei Wörtern klären?
 
Vasiliy Sokolov:

Das Überschreiben von Operatoren ist nichts weiter als syntaktischer Zucker. Es ist besser, diese Praxis aufzugeben und statt des Zuweisungsoperators die Methode Copy() oder Clone() zu verwenden - einfach und klar:

class CMyClass
{
private:
   int m_state;
public:
   CMyClass* Copy()
   {
      CMyClass* obj = new CMyClass();
      obj.m_state = state;
      return obj;
   }
}


Vasily, ich danke Ihnen für Ihre Meinung. Ich stimme Ihrem Ansatz zu, mit einem kleinen Zusatz:

//+------------------------------------------------------------------+
//| Тестовый класс                                                   |
//+------------------------------------------------------------------+
class CMyClass
  {
private:
   int               m_state;

public:
   //--- конструктор\деструктор
   void CMyClass(){m_state=WRONG_VALUE;};
   void ~CMyClass(){};
   //--- копирование
   bool Copy(const CMyClass &_src_obj)
     {
      int source_state=_src_obj.m_state;
      if(source_state!=WRONG_VALUE)
        {
         this.m_state=source_state;
         return true;
        }
      return false;
     }
   //--- клонирование
   CMyClass *Clone(void)
     {
      CMyClass *obj=new CMyClass();
      if(CheckPointer(obj)==POINTER_DYNAMIC)
         obj.m_state=this.m_state;
      return obj;
     }
   //--- set\get
   void State(const int _src_state)
     {
      this.m_state=_src_state;
     }
   int State(void) const
     {
      return this.m_state;
     }
  };

Skript überprüfen:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- Объект 1
   CMyClass my_obj1;
   my_obj1.State(5);
   PrintFormat("Состояние Объекта 1: %d",my_obj1.State());
//--- Объект 2 - методом клонирования
   CMyClass *ptr_my_obj2;
   ptr_my_obj2=my_obj1.Clone();
   if(CheckPointer(ptr_my_obj2)==POINTER_DYNAMIC)
      PrintFormat("Состояние Объекта 2: %d",ptr_my_obj2.State());
//--- Объект 3 - методом копирования
   CMyClass my_obj3;
   my_obj3.State(3);
   PrintFormat("Состояние Объекта 3: %d",my_obj3.State());
   if(my_obj1.Copy(my_obj3))
      PrintFormat("Состояние Объекта 1: %d",my_obj1.State());
  }

Standard-Vergleichszeichen sind besser hinter Zeigern aufgehoben.

Was meinen Sie mit Zeigern? In diesem Sinne?

CMyClass* ptr1,ptr2;
ptr2=ptr1;
 
Oh mein Gott...
 
Комбинатор:
Oh, mein...
Was dann?
In der Regel gibt es eine Rechtfertigung und eine Option.
 
Artyom Trishkin:
Haben Sie etwas über Ihren Standpunkt erklärt? Nein.
Ich habe eine einfache Streitigkeit gelöscht.

Ich werde nicht auf die Provokationen der Hasser eingehen, die auch noch Analphabeten sind, sondern meinen Standpunkt darlegen:

In normalen Programmiersprachen(nicht in C++)ist das Überladen des '='-Operators verboten. Ich schlage vor, dass vor der Verwendung solcher Überladungen, insbesondere von Zuweisungsoperatoren, diejenigen, die dies wünschen, gründlich darüber nachdenken, warum die dummen Architekten dieser dummen Sprachen dies tun.

Konnte nicht widerstehen, persönlich zu andrei: Mensch, blamier dich doch nicht so. Sie sagen so dummes Zeug: erst über FP, jetzt über die Betreiber. Möchte hayterite - willkommen: geben Hinweise auf maßgebliche Quellen, zu rechtfertigen, etc. Was Sie jetzt tun, ist ein tollwütiger und vor allem völlig ungebildeter Hass. Sie scheinen ein Programmierer zu sein, sogar ein richtiger - es ist schon beschämend, so etwas zu schreiben.

 
Dennis Kirichenko:

Artem, du irrst dich. Was kann man ohne Mädchen machen? - Die Mädchen gehören alle zu uns :-))

Aber im Ernst, ich möchte Folgendes diskutieren. Es gibt eine Klasse, in der der Kopierkonstruktor geschrieben und der Zuweisungsoperator außer Kraft gesetzt wird. Frage. Wann sollten und müssen sie anders sein?


Der Compiler selbst erstellt einen einfachen Kopierkonstruktor, der einfach alle Mitglieder der Klasse oder Struktur kopiert.

Wenn Sie möchten, dass während des Kopierens andere Aktionen ausgeführt werden, können Sie einen eigenen Kopierkonstruktor definieren

und Zuweisungsoperator.

Der Zuweisungsoperator wird für ein bestehendes Objekt aufgerufen, muss also zunächst prüfen, ob die Zuweisung

selbst, gibt dann gegebenenfalls das vorhandene Objekt frei und tut dann das Gleiche wie der Konstruktor.