Hablando de la OLP en el salón - página 15

 
Vladimir Pastushak:

¿Hasta dónde va a llegar?


Revisa tu correo.

 

¡Hola, moderadores! Hice una pregunta normal a la que recibí una grosería. Si lo derribas, derriba también a los operadores y a los punteros sin sentido.

Y que no aparezca Sokolov en los temas de OOP para nada, con semejantes defensores de la OOP en el foro morirá en la agonía.

 
Комбинатор:

¡Hola, moderadores! Hice una pregunta normal, a la que recibí una grosería, así que si la derribas, derriba también las tonterías sobre los operadores y las señales.

Y que no aparezca Sokolov en los temas de OOP para nada, con semejantes defensores de la OOP el foro se extinguirá en la agonía.

¿Ha aclarado algo sobre su punto de vista? No.
He borrado una simple riña.
 

Un buen ejemplo sobre el tema de OOP.

Graphics editor MT4
Graphics editor MT4
  • 2018.01.15
  • Evgeniy Serov
  • www.mql5.com
Утилита Graphics editor MT4 предназначена для создания и редактирования графических объектов типа: Удобный и интуитивно понятный интерфейс позволяет быстро и эффективно редактировать основные параметры графических объектов и сразу же видеть результат изменений. Входные параметры Languages - русский/английский; base_corner - угол привязки...
 
Artyom Trishkin:
¿Ha aclarado algo sobre su punto de vista? No.
¿Qué debía aclarar en una pregunta de dos palabras?
 
Vasiliy Sokolov:

Anular operadores no da más que azúcar sintáctico. Es mejor abandonar esta práctica y utilizar el método Copy() o Clone() en lugar del operador de asignación - simple y claro:

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


Vasily, gracias por tu opinión. Estoy de acuerdo con tu planteamiento con un pequeño añadido:

//+------------------------------------------------------------------+
//| Тестовый класс                                                   |
//+------------------------------------------------------------------+
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;
     }
  };

Comprobación del guión:

//+------------------------------------------------------------------+
//| 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());
  }

Los caracteres de comparación estándar es mejor dejarlos detrás de los punteros.

¿Qué quiere decir con punteros? ¿En este sentido?

CMyClass* ptr1,ptr2;
ptr2=ptr1;
 
Oh, Dios mío...
 
Комбинатор:
Oh, mi...
¿Y luego qué?
Suele haber una justificación y una opción.
 
Artyom Trishkin:
¿Ha explicado algo sobre su punto de vista? No.
He borrado una simple riña.

No voy a ceder a las provocaciones de los que odian, que además son analfabetos, sino que voy a explicar mi punto de vista:

En los lenguajes de programación normales(no en C++),la sobrecarga del operador '=' está prohibida. Y en algunos, la sobrecarga de operadores está prohibida casi por completo, ya que allí se considera merecidamente un anti-patrón. Sugiero que antes de utilizar cualquier sobrecarga de este tipo, especialmente el operador de asignación, los que quieran, piensen bien por qué los estúpidos arquitectos de esos estúpidos lenguajes hacen eso.

Nopude resistirme, personalmente a andrei: caramba, no te avergüences así. Qué tonterías dices: primero sobre FP, ahora sobre los operadores. Quieres hayterite - bienvenido: dar referencias a fuentes autorizadas, justificar, etc. Lo que está haciendo ahora es un odio rabioso y, sobre todo, totalmente analfabeto. Parece que eres un programador, como incluso uno de verdad - ya es vergonzoso escribir esas cosas.

 
Dennis Kirichenko:

Artem, te equivocas. ¿Qué se puede hacer sin las chicas? - Las niñas son todas nuestras :-))

Pero en serio, esto es lo que quiero discutir. Hay una clase en la que se escribe el constructor de copia y se anula el operador de asignación. Pregunta. ¿Cuándo deben ser y deben ser diferentes?


El propio compilador crea un constructor de copia simple que simplemente copia todos los miembros de la clase o estructura.

Si quieres que se realicen otras acciones mientras se copia, puedes definir tu propio constructor de copias

y operador de asignación.

El operador de asignación se llama para un objeto existente, por lo que primero debe comprobar si la asignación

mismo, luego liberar el objeto existente si es necesario, y luego hacer lo mismo que el constructor.