Alexey Navoykov: Você está se referindo à biblioteca padrão deles? )
Não, quero dizer que na MQL não se pode declarar um método virtual abstrato sem implementação. Na MQL, os métodos virtuais de uma classe base devem ter sempre uma implementação, que está repleta dos problemas que você mencionou.
Nem tudo é ruim, na minha opinião. Não há tantas interfaces principais básicas em C#, na minha opinião (não sou especialista em C#), que você não possa reduzir seus métodos a uma superclasse básica e depois herdar o que você precisa.
P.S. Implementar algo múltiplo através de construções como <<<<>>>> é um pouco chato. Melhor fazer funções através de operadores, por exemplo, a==b chamadas a.compareto( b ), a[comparador]==b comparador de chamadas.compare(a,b) etc.
Não, quero dizer que na MQL não se pode declarar um método virtual abstrato sem implementação. Na MQL, os métodos virtuais de uma classe base devem ter sempre uma implementação, que está repleta dos problemas que você mencionou.
Não tenho certeza por que você não pode declará-lo sem implementação? Os métodos de classe abstrata têm sido apoiados na MQL há anos.
2. Vamos ver o que acontece, se eu conseguir acertar o que estou fazendo agora, vou postar no fórum).
Não de graça, sim. Qualquer solução OOP universal se revela cara, mas se seu propósito é construir com facilidade e beleza Expert Advisors e indicadores simples (sem características especiais), então vale a pena, imho.
Hmm, característica interessante... Presumo que esta seja uma implementação padrão, que pode ser chamada em descendentes como A::f2(). ou seja
class B : public A
{
virtualint f2() { return A::f2(); }
};
p.s. Eu tentei agora... Mesmo que A::f2() não tenha corpo, o compilador não reage a tal chamada. Isto é, eu tenho que pegar um erro mais tarde no tempo de execução. De jeito nenhum.
Você está se referindo à biblioteca padrão deles? )
Não, quero dizer que na MQL não se pode declarar um método virtual abstrato sem implementação. Na MQL, os métodos virtuais de uma classe base devem ter sempre uma implementação, que está repleta dos problemas que você mencionou.
Não há muitas interfaces básicas básicas em C#
Na verdade, há muita coisa.
Nem tudo é ruim, na minha opinião. Não há tantas interfaces principais básicas em C#, na minha opinião (não sou especialista em C#), que você não possa reduzir seus métodos a uma superclasse básica e depois herdar o que você precisa.
P.S. Implementar algo múltiplo através de construções como <<<<>>>> é um pouco chato. Melhor fazer funções através de operadores, por exemplo, a==b chamadas a.compareto( b ), a[comparador]==b comparador de chamadas.compare(a,b) etc.Imho, seria uma terrível amálgama.
+ Chamar métodos virtuais não é grátis.Não, quero dizer que na MQL não se pode declarar um método virtual abstrato sem implementação. Na MQL, os métodos virtuais de uma classe base devem ter sempre uma implementação, que está repleta dos problemas que você mencionou.
Não tenho certeza por que você não pode declará-lo sem implementação? Os métodos de classe abstrata têm sido apoiados na MQL há anos.
1. Na verdade, são muitos.
2. imho, seria uma terrível amálgama.
+ A chamada de métodos virtuais não é gratuita.1. eu vou saber.
2. Vamos ver o que acontece, se eu conseguir acertar o que estou fazendo agora, vou postar no fórum).
Não de graça, sim. Qualquer solução OOP universal se revela cara, mas se seu propósito é construir com facilidade e beleza Expert Advisors e indicadores simples (sem características especiais), então vale a pena, imho.
Não entendo realmente porque não se pode declarar sem implementação? Os métodos de classe abstrata têm sido apoiados na MQL há anos.
Porque uma entrada como esta causará um erro de compilação:
Porque uma entrada como esta causará um erro de tempo de compilação:
E a pessoa achou impossível declarar tal método na MQL, tanto quanto eu entendi de seu posto.
Poucas pessoas sabem (ainda menos quem sabe e usa), mas asfunções puramente virtuais podem ter um corpo
Eles também têm que ser sobrecarregados na classe descendente
Poucas pessoas sabem (ainda menos sabem e usam), masfunções puramente virtuais podem ter um corpo
Eles também têm que ser sobrecarregados na classe descendente
Então as interfaces ainda podem ter seu próprio código de método? Pode ser chamado de alguma forma? )
Acabei de me deparar com isto recentemente...
p.s. Eu tentei agora... Mesmo que A::f2() não tenha corpo, o compilador não reage a tal chamada. Isto é, eu tenho que pegar um erro mais tarde no tempo de execução. De jeito nenhum.
Hmm, característica interessante... Acho que é um método padrão, apenas para chamá-lo em descendentes de A::f2().
Testado - você está certo em geral =)
p.s. Embora eu tenha tentado agora... Mesmo que A::f2() não tenha corpo, o compilador não reage a tal chamada.
Aparentemente é uma barata, afinal de contas.