마운드에서 OOP에 대해 이야기하기 - 페이지 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에 대해, 이제 연산자에 대해. 속이려는 경우 - 환영: 신뢰할 수 있는 출처에 대한 링크 제공, 정당화 등 그리고 당신이 지금 하고 있는 일은 열광적이고, 가장 중요하게는 절대적으로 문맹인 증오입니다. 글쎄, 당신은 실제 프로그래머와도 같은 프로그래머와 같습니다. 그런 것을 이미 작성하는 것은 부끄러운 일입니다.

 
Dennis Kirichenko :

Artyom, 당신은 틀렸습니다. 소녀들은 어디에 있습니까? - 소녀들은 우리의 fso :-))

그러나 진지하게, 여기 내가 논의하고 싶은 것이 있습니다. 자체 복사 생성자가 작성되고 할당 연산자 가 재정의되는 클래스가 있습니다. 문제. 언제 달라야 하고 달라야 합니까?


컴파일러 자체는 클래스나 구조체의 모든 멤버를 단순히 복사하는 간단한 복사 생성자를 만듭니다.

복사할 때 이 작업 외에 다른 작업을 수행해야 하는 경우 고유한 복사 생성자를 정의할 수 있습니다.

및 할당 연산자.

할당 연산자는 기존 개체에서 호출되므로 할당이 진행 중인지 먼저 확인해야 합니다.

그런 다음 필요하면 기존 개체를 해제한 다음 생성자와 동일한 작업을 수행합니다.