ラウンジでPLOについて語る - ページ 15

 
Vladimir Pastushak:

わざわざどこに行くのか?


メールをチェックする

 

モデレーターの皆さん、こんにちは。普通の質問をしたら、失礼なことを言われた。 破るなら、オペレーターやポインターの無意味さも破れ。

そして、SokolovをOOPの話題には一切登場させないでください。このようなOOP擁護派が掲示板にいると、彼は苦悩の末に死んでしまうでしょう。

 
Комбинатор:

モデレーターの皆さん、こんにちは。普通の質問をしたら失礼なことを言われたので、それを取り締まるなら、オペレーターや標識のくだりも取り締まってください。

そして、Sokolovを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;
   }
}


Vasilyさん、ご意見ありがとうございます。私はあなたの考え方に賛成ですが、ひとつだけ小さな追加事項があります。

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

アーテム、あなたは間違っている。女の子がいなくて何ができる?- 彼女たちはみんな私たちのものです :-))

しかし、真面目な話、ここで議論したいのは、このことです。コピーコンストラクタを記述し、代入演算 子をオーバーライドしたクラスがあります。質問です。どのような場合にそうなるのか、また、違うものでなければならないのか。


コンパイラ自身が、クラスや構造体の全メンバーを単純にコピーするコピーコンストラクタを作成するのです。

コピー中に他の動作をさせたい場合は、独自のコピーコンストラクタを定義します。

と代入演算子で構成されています。

代入演算子は、既存のオブジェクトに対して呼び出されるため、まず、代入演算子が存在するかどうかを確認する必要があります。

を生成し、必要に応じて既存のオブジェクトを解放した後、コンストラクタと同じ処理を行います。