MQL5의 OOP에 대한 질문 - 페이지 12

 
Vasiliy Pushkaryov :

질문 하나만 더 해주세요. CButton에서 자식 클래스 CMyButton을 만드는 경우 버튼을 만든 다음 클래스 외부에서 해당 속성을 변경할 수 있습니다. 이것은 아래 OnInit()에서 수행됩니다.

그러나 자식 클래스 내부에 추가 필드를 만들고 새 함수에서 CButton 클래스의 내장 속성을 사용하려는 경우 올바르게 구현하는 방법은 무엇입니까?

CButton 클래스에서 m_button 클래스 멤버는 private 섹션에 선언됩니다.

부모 클래스의 private 섹션에 들어가는 것은 불가능합니다.

어쩌면 간단하고 간단할 수도 있습니다. CButton 클래스에서 그래픽 개체의 이름이 어떻게 형성되는지 살펴보고 이러한 그래픽 개체와 직접 작동합니다. 특히 버튼은 단순해야 하며 하나의 그래픽 개체만 있습니다.

 
TheXpert :

예, 이미 관련 없는 두 사람이 코드 충돌을 포토샵으로 처리하고 있습니다)

코드가 제대로 작동하지 않습니다. 코드 자체에서 알 수 있습니다.))

두 사람? 당신의 환상에서, 그렇지? 적어도 더 주의 깊게 읽거나 적어도 그림을 더 주의 깊게 보십시오. 첫 번째 메시지에는 디버거의 메시지가 있습니다. 그리고 디버거 없이 컴파일하고 작동합니다.

 
Dmitry Fedoseev :

두 사람? 당신의 환상에서, 그렇지? 적어도 더 주의 깊게 읽거나 적어도 그림을 더 주의 깊게 보십시오. 첫 번째 메시지에는 디버거의 메시지가 있습니다. 그리고 디버거 없이 컴파일하고 작동합니다.

디버거 없이 충돌)

디버거에서 충돌))

스크립트 출력 로그를 어디에서 봐야 할지 모르시겠습니까? )))

 
TheXpert :

디버거 없이 충돌)

디버거에서 충돌))

스크립트 출력 로그를 어디에서 봐야 할지 모르시겠습니까? )))

아니요, 잘 모르겠지만 어디 있는지 알려주세요.

 
Vasiliy Pushkaryov :

질문 하나만 더 해주세요. CButton에서 자식 클래스 CMyButton을 만드는 경우 버튼을 만든 다음 클래스 외부에서 해당 속성을 변경할 수 있습니다. 이것은 아래 OnInit()에서 수행됩니다.

그러나 자식 클래스 내부에 추가 필드를 만들고 새 함수에서 CButton 클래스의 내장 속성을 사용하려는 경우 올바르게 구현하는 방법은 무엇입니까?

CButton 클래스에서 m_button 클래스 멤버는 private 섹션에 선언됩니다.

내 생각에, 당신은 다시 꼬리 쪽에서 문제를 해결하고 있습니다. 나는 여전히 다른 한편으로이 문제를 해결하도록 조언 할 것입니다.

 class CMyButton : public CButton
{ 
   private : 
   CButton        *mybtn;
   public : 
              CMyButton( void ){}; 
             ~CMyButton( void ){}; 
             
         bool     isPrevState;         // состояние кнопки на предыд.тике, true - была нажата     
         void     setButton();         // создаем кнопку
         void     setProp();           // задаем в ходе программы свойства
}; 

void CMyButton::setButton( void )
{
  mybtn = new CButton;
  mybtn.Create(....................);
   // как в этой функции создать кнопку? Я не могу вызвать метод Create()


드미트리 페도세프 :

부모 클래스의 private 섹션에 들어가는 것은 불가능합니다.

최소한 #define을 통해 들어갈 수 있고 dynamic_cast를 실험할 수 있습니다. 작년에 나는 dynamic_cast의 가능성을 연구했습니다. 놀라운 일을 할 수 있지만 이것은 힘든 과정입니다.


더엑스퍼트 :

디버거 없이 충돌)

확인 - 나는 또한 얻었다: 2019.07.05 17:10:27.307 1 (유로USD,H1) '1.mq5'에서 잘못된 포인터 액세스(43,6)

 

그리고 당신은 저에게 흥미를 느꼈고 저는 아마도 제가 정말 바보라고 생각했습니다. 5년 전에 작성한 코드를 파헤쳤습니다. 여기에 단편이 있습니다.

계속해서... 여기에 뿌릴 수 있습니다... 원하는 만큼... 그리고 제가 바보라고 생각하는 것은 불가능하지만 지금은 그 반대입니다. 미친 악마처럼 뛰어 다니면 모든 것이 쓸모가 없습니다.

***

네, 그리고 제 코드를 사용하면 컴파일되고 작동한다는 사실에도 불구하고 뭔가 문제가 있다는 것이 금방 분명해집니다. 개체는 삭제를 통해 삭제되지 않습니다.

그러나 당신은 내가 무엇인지도 모른다는 사실을 기쁘게 생각합니다. CObj obj; 계속 믿어...

***

그러나 그들은 "할아버지에게 악을 위해"귀를 발 뒤꿈치에 고정시킬 준비가되어 있습니다. MQL에는 가비지 수집기가 있습니다.

 
Dmitry Fedoseev :

그리고 당신은 저에게 흥미를 느꼈고 저는 아마도 제가 정말 바보라고 생각했습니다. 5년 전에 작성한 코드를 파헤쳤습니다. 여기에 단편이 있습니다.

계속해서... 여기에 뿌릴 수 있습니다... 원하는 만큼... 그리고 내가 바보라는 것은 꿈도 꾸지 못하지만 지금은 그 반대입니다.

포인터에 대한 링크와 모든 소란으로 인해 객체에 대한 링크가 아닌 모든 것이 여기에서 정확합니다. 코드를 주의 깊게 보십시오.
 
Vladimir Simakov :
포인터에 대한 링크와 모든 소란으로 인해 객체에 대한 링크가 아닌 모든 것이 여기에서 정확합니다. 코드를 주의 깊게 보십시오.

내가 한 곳에서 *, 다른 곳에서 * &에서 그것을 알아차릴 수 없다고 정말로 생각합니까?

그리고 당신은 또한 내가 CObj obj가 무엇인지 모른다고 생각합니다. ?

 
Vladimir Simakov :
...존재하지 않는 개체에 대한 참조..

그러나 컴파일되고 작동합니다.

 
Dmitry Fedoseev :

내가 한 곳에서 *, 다른 곳에서 * &에서 그것을 알아차릴 수 없다고 정말로 생각합니까?

그리고 당신은 또한 내가 CObj obj가 무엇인지 모른다고 생각합니다. ?

네가 해냈어
 void z(CObj & o){
   o = new CObj();
}