在休息室谈论巴解组织的问题 - 页 15

 
Vladimir Pastushak:

一路走来,它在哪里?


检查你的邮件。

 

你好,版主!我问了一个正常的问题,但我得到了无礼的回应。 如果你撕毁它,也撕毁运营商和指点者的废话。

也不要让索科洛夫出现在OOP的话题中,论坛上有这样的OOP鼓吹者,他会痛苦地死去。

 
Комбинатор:

你好,版主!我问了一个正常的问题,但我得到了无礼的回应,所以如果你撕毁它,也要撕毁关于运营商和路标的废话。

也不要让索科洛夫出现在OOP的话题中,有这样的OOP鼓吹者,论坛会在痛苦中消亡。

你对你的观点有什么澄清吗?没有。
我删除了一个简单的争吵。
 

一个关于OOP主题的好例子。

Graphics editor MT4
Graphics editor MT4
  • 2018.01.15
  • Evgeniy Serov
  • www.mql5.com
Утилита Graphics editor MT4 предназначена для создания и редактирования графических объектов типа: Удобный и интуитивно понятный интерфейс позволяет быстро и эффективно редактировать основные параметры графических объектов и сразу же видеть результат изменений. Входные параметры Languages - русский/английский; base_corner - угол привязки...
 
Artyom Trishkin:
你对你的观点有什么澄清吗?没有。
我应该用两个字的问题来澄清什么呢?
 
Vasiliy Sokolov:

重写操作符只提供了语法上的糖。最好放弃这种做法,使用Copy()或Clone()方法来代替赋值运算符--简单而明确。

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


瓦西里,谢谢你的意见。我同意你的做法,但有一点补充。

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

检查脚本。

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

标准比较字符最好留在指针后面。

你说的指针是什么意思?在这个意义上?

CMyClass* ptr1,ptr2;
ptr2=ptr1;
 
哦,我的上帝...
 
Комбинатор:
哦,我...
然后呢?
通常有一个理由和一个选择。
 
Artyom Trishkin:
你对你的观点有什么解释吗?没有。
我删除了一个简单的争吵。

我不会屈服于那些同样是文盲的仇恨者的挑衅,而是要解释我的观点。

在普通的编程语言中(不是C++),禁止重载"="运算符。我建议在使用任何这样的重载,尤其是赋值运算符之前,那些希望使用的人要认真思考,为什么那些愚蠢的语言的设计者会这样做。

忍不住了,个人对Andrei说: 哎呀,不要这样为难自己。你在说这样的傻话:先是关于FP,现在是关于运营商。想hayterite--欢迎:给出权威的参考资料,说明理由,等等。你现在所做的是一种狂热的、最重要的是完全不懂的仇恨。你似乎是一个程序员,甚至像一个真正的程序员--写这种东西已经很可耻了。

 
Dennis Kirichenko:

Artem,你错了。没有女孩你能做什么?- 女孩们都是我们的:-))

但说真的,这是我想讨论的问题。有一个类,它的复制构造函数被写入,赋值运算符 被重写。问题。他们应该在什么时候,以及他们必须是不同的?


编译器本身创建了一个简单的复制构造函数,简单地复制类或结构的所有成员。

如果你想在复制的同时进行其他操作,你可以定义你自己的复制构造函数

和赋值运算符。

赋值运算符是为一个现有的对象调用的,所以它必须首先检查赋值是否

本身,然后在必要时释放现有对象,然后做与构造函数相同的事情。