MQL5의 OOP에 대한 질문 - 페이지 67 1...606162636465666768697071727374...96 새 코멘트 Igor Makanu 2020.05.28 10:46 #661 그런 또 다른 질문은 Wiki 기사 Abstract class입니다 . C++ 예제에 관심 class CA { // Абстрактный класс public : CA ( void ) { std::cout << "This object of the class " ; } virtual void Abstr ( void ) = 0 ; // Чистая (пустая) виртуальная функция. void fun ( void ) { std::cout << "Реализация не будет наследоваться!" ; } ~CA () { std::cout << "." << std::endl; } //Вызывается в обр. порядке конструкторов }; class CB : public CA { public : CB ( void ) { std::cout << "CB;" ; } void Abstr ( void ){ std::cout << " call function cb.Abstr();" ; } //Подменяющая функция. void fun ( void ){ std::cout << " call function cb.fun()" ; } ~CB () {} // Неверно для абстр. кл. ~CB(){ ~CA(); } }; class CC : public CA { public : CC ( void ) { std::cout << "CC;" ; } void Abstr ( void ) { std::cout << " call function cc.Abstr();" ; } //Подменяющая функция. void fun ( void ) { std::cout << " call function cc.fun()" ; } ~CC () {} // Неверно для абстр. кл. ~CC(){ ~CA(); } }; int main () { std::cout << "Program:" << std::endl; CB cb; cb.Abstr(); cb.fun(); cb.~CB(); CC cc; cc.Abstr(); cc.fun(); cc.~CC(); return 0 ; } 프로그램 결과: 프로그램: CB 클래스의 이 객체. 호출 함수 cb.abstr(); 함수 cb.fun()을 호출합니다. CC 클래스의 이 객체. 호출 함수 cc.abstr(); cc.fun() 함수를 호출합니다. . . void fun( void ) 메서드에 관심이 있습니다. - 가상 지정자가 없는 이유는 무엇입니까? - virtual 을 추가하면 미래에 어떤 변화가 생길까요? 왜 그리고 무엇을 위한 것인지에 대한 코드는 다음과 같습니다. class base { public : virtual void HighPriorityTask() {} virtual void Task() {} }; //+------------------------------------------------------------------+ class A: public base { public : virtual void HighPriorityTask() { Print ( __FUNCSIG__ ); } }; //+------------------------------------------------------------------+ class B: public base { public : virtual void Task() { Print ( __FUNCSIG__ ); } }; //+------------------------------------------------------------------+ void OnStart () { base *obj[ 4 ];; obj[ 0 ] = new A; obj[ 1 ] = new A; obj[ 2 ] = new B; obj[ 3 ] = new B; for ( int i= ArraySize (obj)- 1 ; i>= 0 ; i--) { obj[i].HighPriorityTask(); obj[i].Task(); } for ( int i= ArraySize (obj)- 1 ; i>= 0 ; i--) delete obj[i]; 2020.05.28 14:41:20.294 tst (EURUSD,H1) 무효 B::Task() 2020.05.28 14:41:20.298 tst (EURUSD,H1) 무효 B::Task() 2020.05.28 14:41:20.298 tst (EURUSD,H1) 무효 A::HighPriorityTask() 2020.05.28 14:41:20.298 tst (EURUSD,H1) 무효 A::HighPriorityTask() 그것은 내가 원하는 대로 작동합니다 - 기본 클래스가 있고 그 클래스에서 상속하지만 상속인에게는 하나의 메서드만 필요하며 선언 및 초기화 순서에 관계없이 먼저 HighPriorityTask( ) 메서드와 Task() 물론 모두 한 사이클에서 간단한 방법으로 가능합니까? Questions on OOP in MQL4 및 MQL5에 대한 거래 고문 및 로봇 Koldun Zloy 2020.05.28 12:31 #662 Igor Makanu : 물론 모두 한 사이클에서 간단한 방법으로 가능합니까? 그리고 왜 이것을 한 주기로 수행해야 합니까? 그리고 왜 자연스럽습니까? 당연히 적어도 두 개의 사이클이 있을 것입니다. Igor Makanu 2020.05.28 13:38 #663 Koldun Zloy : 그리고 왜 이것을 한 주기로 수행해야 합니까? 그리고 왜 자연스럽습니까? 당연히 적어도 두 개의 사이클이 있을 것입니다. 좋아, 2주기, 그래서 2주기, 그래서 기적은 없을 것이다(( Roman 2020.05.28 15:17 #664 Igor Makanu : 좋아, 2주기, 그래서 2주기, 그래서 기적은 없을 것이다(( 주기를 완전히 없애려고 할 수 있습니다. 루프와 재귀 없이 1에서 100까지 인쇄하는 방법의 예가 있습니다. 물론 이것이 일반적으로 질문의 주제인 경우 이러한 예가 도움이 될 것입니다.)) Печать от 1 до 100 на C ++, без цикла и рекурсии | Портал информатики для гиков 2020.01.01espressocode.top Ниже приводится программа на C ++, которая печатает от 1 до 100 без цикла и без рекурсии. #include using namespace std; template TheXpert 2020.05.28 15:37 #665 Roman : 이게 왜 여기 뜬금없지? Aleksey Mavrin 2020.05.28 17:14 #666 Igor Makanu : 그런 또 다른 질문은 Wiki 기사 Abstract class입니다 . C++ 예제에 관심 프로그램 결과: 프로그램: CB 클래스의 이 개체. 호출 함수 cb.abstr(); 함수 cb.fun()을 호출합니다. CC 클래스의 이 객체. 호출 함수 cc.abstr(); cc.fun() 함수를 호출합니다. . . void fun( void ) 메서드에 관심이 있습니다. - 가상 지정자가 없는 이유는 무엇입니까? - virtual 을 추가하면 미래에 어떤 변화가 생길까요? 왜 그리고 무엇을 위한 것인지에 대한 코드는 다음과 같습니다. 2020.05.28 14:41:20.294 tst (EURUSD,H1) 무효 B::Task() 2020.05.28 14:41:20.298 tst (EURUSD,H1) 무효 B::Task() 2020.05.28 14:41:20.298 tst (EURUSD,H1) 무효 A::HighPriorityTask() 2020.05.28 14:41:20.298 tst (EURUSD,H1) 무효 A::HighPriorityTask() 그것은 내가 원하는 대로 작동합니다 - 기본 클래스가 있고 그 클래스에서 상속하지만 상속인에게는 하나의 메서드만 필요하며 선언 및 초기화 순서에 관계없이 먼저 HighPriorityTask( ) 메서드와 Task() 물론 모두 한 사이클에서 간단한 방법으로 가능합니까? 1. 기본 클래스 포인터를 선언하고 자식 개체를 생성하는 경우 동일한 기본 클래스 포인터를 통해 메서드를 호출할 때: a) 가상 메소드는 자식 클래스에 의해 호출됩니다(이를 위해 특별히 생성된 가상 함수 테이블을 통해) b) 비가 상 메소드는 기본 클래스에 의해 호출됩니다. 자식 클래스에서 재정의하더라도. 2. 한 사이클에서 바로 하고 싶다면 a) 유형별로 객체 배열을 정렬하는 번거로움. b) 특정 작업의 경우 - 이러한 작업을 수행하는 개체에 대한 별도의 포인터 배열을 유지합니다. 저것들. HighPriorityTask 를 호출해야 하는 모든 개체 first라는 별도의 배열에 저장해야 합니다. 추신 그러나 정렬 없이 이론적으로 어떻게 상상할 수 있습니까? 루프의 한 패스에서 먼저 객체의 절반이 실행되고 나머지는 실행될 것입니다. 스마일 글쎄, 울타리에 작업의 대기열만 있다면. 그러나 이것은 이미 창조적 인 질문입니다. 페니 문제를 해결하는 정교한 방법을 많이 생각해 낼 수 있습니다.)) 가장 중요한 것은 물리 법칙을 침해하지 않는 것이며 모든 것이 잘 될 것입니다))) 앗. 지원 질문 두 MA 교차 정리 철에 대한 조언 Igor Makanu 2020.05.28 17:32 #667 Aleksey Mavrin : 2. 한 사이클에서 바로 하고 싶다면 a) 유형별로 객체 배열을 정렬하는 번거로움. b) 특정 작업의 경우 - 이러한 작업을 수행하는 개체에 대한 별도의 포인터 배열을 유지합니다. 저것들. HighPriorityTask 를 호출해야 하는 모든 개체 first라는 별도의 배열에 저장해야 합니다. 추신 그러나 정렬 없이 이론적으로 어떻게 상상할 수 있습니까? 루프의 한 단계에서 먼저 개체의 절반이 실행되고 나머지는 실행될 것입니다. 스마일 글쎄, 울타리에 작업의 대기열만 있다면. 그러나 이것은 이미 창조적 인 질문입니다. 페니 문제를 해결하는 정교한 방법을 많이 생각해 낼 수 있습니다.)) 가장 중요한 것은 물리 법칙을 침해하지 않는 것이며 모든 것이 잘 될 것입니다))) 나는 확실히 원하지 않습니다. 컴파일러가 빈 메서드를 최적화한다고 생각합니다. 알렉세이 마브린 : 1. 기본 클래스 포인터를 선언하고 자식 개체를 생성하는 경우 동일한 기본 클래스 포인터를 통해 메서드를 호출할 때: a) 가상 메소드는 자식 클래스에 의해 호출됩니다(이를 위해 특별히 생성된 가상 함수 테이블을 통해) b) 비가 상 메소드는 기본 클래스에 의해 호출됩니다. 자식 클래스에서 재정의하더라도. 예, 어떤 이유로 저는 방금 json 라이브러리 https://www.mql5.com/en/code/11134 를 지배했다는 것을 기억하지 못했습니다. 컴파일러 경고가 있었습니다 더 이상 사용되지 않는 동작, 숨겨진 메소드 호출은 향후 MQL 컴파일러 버전에서 비활성화됩니다. 클래스에서 메소드를 지정하여 처리 this .JSONValue:: getLong(getValue(index),out); 감사합니다, 전반적으로 선명한 그림 Andrei Trukhanovich 2020.05.28 17:42 #668 Igor Makanu : 나는 확실히 원하지 않습니다. 컴파일러가 빈 메서드를 최적화한다고 생각합니다. 가상? 사실이 아닙니다. 그러나 빈 함수를 호출하는 것은 어쨌든 많이 먹지 않을 것입니다. 이고르 마카누 : 좋아, 2주기, 2주기, 그러면 기적은 없을 것입니다(( 논리적으로 두 번에 수행되는 작업을 한 사이클에 밀어 넣는 이유는 무엇입니까? 결국 속도, 명확성 또는 단순성 측면에서 이득이 없으며 하드 드라이브의 크기는 오랫동안 메가 바이트 단위가 아니라 측정됩니다. Igor Makanu 2020.05.28 18:27 #669 Andrei Trukhanovich : 논리적으로 두 번에 수행되는 작업을 한 사이클에 밀어 넣는 이유는 무엇입니까? 결국 속도, 명확성 또는 단순성 측면에서 이득이 없으며 하드 드라이브의 크기는 오랫동안 메가 바이트 단위가 아니라 측정됩니다. 그리고 난 아직 아무것도 꽝! )))) 일반적인 메서드 호출과 유사한 작업을 수행하는 특성을 알 때까지 감사합니다, 잘 설명 안드레이 트루하노비치 : 가상? 사실이 아닙니다. 예를 들어 질문은 다형성 수단의 다양한 선택에서 나타났고, 그런 다음 그것 없이 가상하고, 상속하고, 파생 클래스에서 이 메서드를 닫습니다. Dmitry Fedoseev 2020.05.29 02:26 #670 Roman : 주기를 완전히 없애려고 할 수 있습니다. 루프와 재귀 없이 1에서 100까지 인쇄하는 방법의 예가 있습니다. 물론 이것이 일반적으로 질문의 주제인 경우 이러한 예가 도움이 될 것입니다.)) 그리고 뭐? 또 다른 패치. 그것은 패턴의 지지자들이 그를 인식하지 못한 것뿐입니다. 분명히 정통도 아니고 정식도 아닙니다. 재귀는 왜 안되지? 또한 재귀는 함께가 아니라 건너 뜁니다. 1...606162636465666768697071727374...96 새 코멘트 사유: 취소 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
그런 또 다른 질문은 Wiki 기사 Abstract class입니다 .
C++ 예제에 관심
프로그램 결과:
프로그램:
CB 클래스의 이 객체. 호출 함수 cb.abstr(); 함수 cb.fun()을 호출합니다.
CC 클래스의 이 객체. 호출 함수 cc.abstr(); cc.fun() 함수를 호출합니다.
.
.
void fun( void ) 메서드에 관심이 있습니다.
- 가상 지정자가 없는 이유는 무엇입니까?
- virtual 을 추가하면 미래에 어떤 변화가 생길까요?
왜 그리고 무엇을 위한 것인지에 대한 코드는 다음과 같습니다.
2020.05.28 14:41:20.294 tst (EURUSD,H1) 무효 B::Task()
2020.05.28 14:41:20.298 tst (EURUSD,H1) 무효 B::Task()
2020.05.28 14:41:20.298 tst (EURUSD,H1) 무효 A::HighPriorityTask()
2020.05.28 14:41:20.298 tst (EURUSD,H1) 무효 A::HighPriorityTask()
그것은 내가 원하는 대로 작동합니다 - 기본 클래스가 있고 그 클래스에서 상속하지만 상속인에게는 하나의 메서드만 필요하며 선언 및 초기화 순서에 관계없이 먼저 HighPriorityTask( ) 메서드와 Task()
물론 모두 한 사이클에서
간단한 방법으로 가능합니까?
물론 모두 한 사이클에서
간단한 방법으로 가능합니까?
그리고 왜 이것을 한 주기로 수행해야 합니까?
그리고 왜 자연스럽습니까?
당연히 적어도 두 개의 사이클이 있을 것입니다.
그리고 왜 이것을 한 주기로 수행해야 합니까?
그리고 왜 자연스럽습니까?
당연히 적어도 두 개의 사이클이 있을 것입니다.
좋아, 2주기, 그래서 2주기, 그래서 기적은 없을 것이다((
좋아, 2주기, 그래서 2주기, 그래서 기적은 없을 것이다((
주기를 완전히 없애려고 할 수 있습니다.
루프와 재귀 없이 1에서 100까지 인쇄하는 방법의 예가 있습니다.
물론 이것이 일반적으로 질문의 주제인 경우 이러한 예가 도움이 될 것입니다.))
그런 또 다른 질문은 Wiki 기사 Abstract class입니다 .
C++ 예제에 관심
프로그램 결과:
프로그램:
CB 클래스의 이 개체. 호출 함수 cb.abstr(); 함수 cb.fun()을 호출합니다.
CC 클래스의 이 객체. 호출 함수 cc.abstr(); cc.fun() 함수를 호출합니다.
.
.
void fun( void ) 메서드에 관심이 있습니다.
- 가상 지정자가 없는 이유는 무엇입니까?
- virtual 을 추가하면 미래에 어떤 변화가 생길까요?
왜 그리고 무엇을 위한 것인지에 대한 코드는 다음과 같습니다.
2020.05.28 14:41:20.294 tst (EURUSD,H1) 무효 B::Task()
2020.05.28 14:41:20.298 tst (EURUSD,H1) 무효 B::Task()
2020.05.28 14:41:20.298 tst (EURUSD,H1) 무효 A::HighPriorityTask()
2020.05.28 14:41:20.298 tst (EURUSD,H1) 무효 A::HighPriorityTask()
그것은 내가 원하는 대로 작동합니다 - 기본 클래스가 있고 그 클래스에서 상속하지만 상속인에게는 하나의 메서드만 필요하며 선언 및 초기화 순서에 관계없이 먼저 HighPriorityTask( ) 메서드와 Task()
물론 모두 한 사이클에서
간단한 방법으로 가능합니까?
1. 기본 클래스 포인터를 선언하고 자식 개체를 생성하는 경우 동일한 기본 클래스 포인터를 통해 메서드를 호출할 때:
a) 가상 메소드는 자식 클래스에 의해 호출됩니다(이를 위해 특별히 생성된 가상 함수 테이블을 통해)
b) 비가 상 메소드는 기본 클래스에 의해 호출됩니다. 자식 클래스에서 재정의하더라도.
2. 한 사이클에서 바로 하고 싶다면
a) 유형별로 객체 배열을 정렬하는 번거로움.
b) 특정 작업의 경우 - 이러한 작업을 수행하는 개체에 대한 별도의 포인터 배열을 유지합니다. 저것들. HighPriorityTask 를 호출해야 하는 모든 개체
first라는 별도의 배열에 저장해야 합니다.
추신 그러나 정렬 없이 이론적으로 어떻게 상상할 수 있습니까? 루프의 한 패스에서 먼저 객체의 절반이 실행되고 나머지는 실행될 것입니다. 스마일 글쎄, 울타리에 작업의 대기열만 있다면.
그러나 이것은 이미 창조적 인 질문입니다. 페니 문제를 해결하는 정교한 방법을 많이 생각해 낼 수 있습니다.)) 가장 중요한 것은 물리 법칙을 침해하지 않는 것이며 모든 것이 잘 될 것입니다)))
2. 한 사이클에서 바로 하고 싶다면
a) 유형별로 객체 배열을 정렬하는 번거로움.
b) 특정 작업의 경우 - 이러한 작업을 수행하는 개체에 대한 별도의 포인터 배열을 유지합니다. 저것들. HighPriorityTask 를 호출해야 하는 모든 개체
first라는 별도의 배열에 저장해야 합니다.
추신 그러나 정렬 없이 이론적으로 어떻게 상상할 수 있습니까? 루프의 한 단계에서 먼저 개체의 절반이 실행되고 나머지는 실행될 것입니다. 스마일 글쎄, 울타리에 작업의 대기열만 있다면.
그러나 이것은 이미 창조적 인 질문입니다. 페니 문제를 해결하는 정교한 방법을 많이 생각해 낼 수 있습니다.)) 가장 중요한 것은 물리 법칙을 침해하지 않는 것이며 모든 것이 잘 될 것입니다)))
나는 확실히 원하지 않습니다. 컴파일러가 빈 메서드를 최적화한다고 생각합니다.
1. 기본 클래스 포인터를 선언하고 자식 개체를 생성하는 경우 동일한 기본 클래스 포인터를 통해 메서드를 호출할 때:
a) 가상 메소드는 자식 클래스에 의해 호출됩니다(이를 위해 특별히 생성된 가상 함수 테이블을 통해)
b) 비가 상 메소드는 기본 클래스에 의해 호출됩니다. 자식 클래스에서 재정의하더라도.
예, 어떤 이유로 저는 방금 json 라이브러리 https://www.mql5.com/en/code/11134 를 지배했다는 것을 기억하지 못했습니다.
컴파일러 경고가 있었습니다
더 이상 사용되지 않는 동작, 숨겨진 메소드 호출은 향후 MQL 컴파일러 버전에서 비활성화됩니다.
클래스에서 메소드를 지정하여 처리
this .JSONValue:: getLong(getValue(index),out);
감사합니다, 전반적으로 선명한 그림
나는 확실히 원하지 않습니다. 컴파일러가 빈 메서드를 최적화한다고 생각합니다.
가상? 사실이 아닙니다. 그러나 빈 함수를 호출하는 것은 어쨌든 많이 먹지 않을 것입니다.
좋아, 2주기, 2주기, 그러면 기적은 없을 것입니다((
논리적으로 두 번에 수행되는 작업을 한 사이클에 밀어 넣는 이유는 무엇입니까? 결국 속도, 명확성 또는 단순성 측면에서 이득이 없으며 하드 드라이브의 크기는 오랫동안 메가 바이트 단위가 아니라 측정됩니다.
논리적으로 두 번에 수행되는 작업을 한 사이클에 밀어 넣는 이유는 무엇입니까? 결국 속도, 명확성 또는 단순성 측면에서 이득이 없으며 하드 드라이브의 크기는 오랫동안 메가 바이트 단위가 아니라 측정됩니다.
그리고 난 아직 아무것도 꽝! ))))
일반적인 메서드 호출과 유사한 작업을 수행하는 특성을 알 때까지
감사합니다, 잘 설명
가상? 사실이 아닙니다.
예를 들어 질문은 다형성 수단의 다양한 선택에서 나타났고, 그런 다음 그것 없이 가상하고, 상속하고, 파생 클래스에서 이 메서드를 닫습니다.
주기를 완전히 없애려고 할 수 있습니다.
루프와 재귀 없이 1에서 100까지 인쇄하는 방법의 예가 있습니다.
물론 이것이 일반적으로 질문의 주제인 경우 이러한 예가 도움이 될 것입니다.))
그리고 뭐? 또 다른 패치. 그것은 패턴의 지지자들이 그를 인식하지 못한 것뿐입니다. 분명히 정통도 아니고 정식도 아닙니다. 재귀는 왜 안되지? 또한 재귀는 함께가 아니라 건너 뜁니다.