O temada OLP transformou-se numa "boa ou não tão boa" troca de opiniões. Gostaria de obter respostas a mais perguntas sobre a terra.
A questão é esta. Num livro sobre C++ encontrei uma menção de que uma instância de uma classe pode ser feita descendente de duas classes-mãe diferentes simultaneamente, como
Ou algo semelhante (não consegue encontrar a fonte). Qual é a situação na MQL5? É possível declarar que a classe é descendente de duas classes-mãe diferentes? Qual é a sintaxe?
Não é a frase da Help: "No multiple inheritance" sobre esta situação?
Na MQL5 a herança múltipla não é suportada, mas existe um mecanismo interessante para a passagem do ponteiro do objecto, através do qual algo como isto pode ser implementado.
Com o OOP, é muito fácil estruturar o código (perdoar a trivialidade). Os métodos de filmar e carimbar um a um. É muito eficaz e claro. Mas levanta-se uma questão: será que estas embalagens múltiplas não afectam a velocidade de processamento do código pelo processador? Especificamente, existe alguma diferença na velocidade de execução entre estes dois fragmentos de código?
double ddd=0.0; //первый вариант кода, инициализация без применения функций/методов double ddd; //второй вариант кода, инициализация с применением функций/методов void function(double a) { a=0.0; } ... function(ddd);
Ou na fase de compilação é o código convertido da linguagem humana para a linguagem da máquina, para que estas duas variantes não difiram em nada na velocidade de processamento de um computador?
Então a "herança múltipla" é a parentalidade plural?
Sim, exactamente uma classe pode ter um dos pais, uma lata em cascata, mas dois pais e mql5 não podem.
Em princípio, em vez de herança, poderia chamar a classe "tipo como pai" na própria classe e aceder aos dados "tipo como pai" através do seu ponteiro.
Sim, exactamente uma classe pode ter um dos pais, uma lata em cascata, mas dois pais e mql5 não podem.
Este código quase não é diferente de herança múltipla.
class C_A { public: C_A(void){}; ~C_A(void){}; double a; }; //+------------------------------------------------------------------+ class C_B { public: C_B(void){}; ~C_B(void){}; double b; }; //+------------------------------------------------------------------+ class C_C { public: C_A *ua; C_B *ub; C_C(void){ua=new C_A();ub=new C_B();}; ~C_C(void){delete ua;delete ub;}; }; //+------------------------------------------------------------------+Na verdade, a classe C_C tem acesso aos dados C_A e C_B através de indicadores apropriados.
Este código quase não é diferente de herança múltipla.
Na verdade, a classe C_C tem acesso aos dados de C_A e C_B através de indicadores correspondentes.Fixe! Eu não teria pensado em criar uma instância de uma classe externa no construtor. Obrigado pela ajuda!
Adenda. E, nesta linha
C_C(void){ua=new C_A();ub=new C_B();};
O novo operador é aplicado ao construtor de C_A() da classe C_A.
A partir do livro de referência, entendi que o operando do novo operador é a própria classe, não o seu construtor. Que peculiaridades podem existir aqui?
A propósito, após algum tempo os designers terão parâmetros a funcionar, o que tornará a vida muito mais fácil para os criadores.
Fixe! Eu não teria pensado em criar uma instância de uma classe externa no construtor. Obrigado pela ajuda!
Adenda. E nesta linha.
O novo operador é aplicado ao construtor de C_A() da classe C_A.
A partir do livro de referência, entendi que o operando do novo operador é a própria classe, não o seu construtor. Que peculiaridades podem existir aqui?
O novo operador cria uma instância da classe e um construtor é chamado juntamente com ela. Está escrito na sintaxe, pelo que não se pode chamar-lhe o contrário.
Tudo acontece automaticamente na declaração estática.
A propósito, isto também funcionará e será automaticamente destruído
class C_C { public: C_A ua; C_B ub; C_C(void){}; ~C_C(void){}; }; //+------------------------------------------------------------------+
- www.mql5.com
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
O temado OOP transformou-se numa troca de opiniões "boas ou menos boas". Gostaria de obter respostas a mais perguntas sobre a terra.
A questão é esta. Num livro sobre C++ encontrei uma menção de que uma instância de uma classe pode ser feita descendente de duas classes-mãe diferentes simultaneamente, como
Ou algo semelhante (não consegue encontrar a fonte). Qual é a situação na MQL5? É possível declarar que a classe é descendente de duas classes-mãe diferentes? Qual é a sintaxe?
Não é a frase da Help: "No multiple inheritance" sobre esta situação?