2016.09.12 15:49:14.209 Simple_Test (RTS-9.16,M1) array out of range in 'Simple_Test.mqh' (85,33)
ir desajeitadamente para o local especificado no código fonte. Seria conveniente se pudesse fazer duplo clique sobre tal mensagem no diário de bordo do terminal e ir directamente para a linha especificada.
O clássico é uma interface numa classe base com redefinição em descendentes:
Clássico é quando os métodos protegidos/públicos-virtuais são anulados. Mas para o privado, não é tão óbvio (em termos de aplicação). Obrigado pela resposta.
fxsaber: Clássico é quando os métodos virtuais protegidos/públicos são anulados. Mas para o privado, não é tão óbvio (em termos de aplicação). Obrigado pela resposta.
Sim, já apaguei o meu exemplo sem ver a sua resposta, foi realmente lamentável.
Eu próprio fiquei confuso com o básico enquanto vos respondia. Tudo estava correcto nesse exemplo, eu não o deveria ter apagado. O mesmo exemplo mais uma vez com um exemplo de utilização:
class CAnimal
{
private:
voidvirtual Speak(){}
};
class CDog : public CAnimal
{
public:
void Speak(){Print("Гав!");}
};
class CBigDog : public CDog
{
public:
void Speak(){Print("Громкий гав!");}
};
voidOnStart()
{
CDog oDog;
oDog.Speak();
CBigDog oBigDog;
oBigDog.Speak();
CDog* pDog = &oBigDog;
pDog.Speak(); // "Громкий гав!", а не "Гав!", как было бы без виртуального метода
}
Eu próprio fiquei confuso com o básico enquanto vos respondia. Tudo estava correcto nesse exemplo, eu não o deveria ter apagado. Mais uma vez com um exemplo de como o utilizar:
Não é um bom exemplo, uma vez que não se pode ver a interface CAnimal a ser utilizada em qualquer lugar. Sim, eles também tornaram públicos dois descendentes. Compreendo o tema, por isso não há problema.
fxsaber: Este não é um bom exemplo, uma vez que não podemos ver a interface CAnimal a ser utilizada em qualquer lugar. Também dois descendentes foram tornados públicos. Compreendo o tema, por isso não há problema.
Exemplo normal. Um animal abstracto faz basicamente algum som, mas indefinido, por isso não podemos chamar-lhe o método Speak(); só pode ser chamado sobre um animal de uma espécie específica. Por conseguinte, declaramos um método virtual fechado numa classe de base, e anulamo-lo em descendentes e abrimo-lo.
Exemplo normal. Um animal abstracto faz basicamente algum som, mas indefinido, por isso não podemos chamar-lhe o método Speak(); só pode ser chamado sobre um animal de uma espécie específica. Por conseguinte, declaramos um método virtual fechado numa classe de base, e anulamo-lo em descendentes e abrimo-lo.
Seria útil torná-lo privado também nas classes descendentes. Para uma melhor compreensão. Não é o ponto, em suma.
Pode utilizar isto para fazer um análogo da palavra-chave final, proibindo explicitamente a continuação da herança.
Mas como o exemplo acima mostra, não se pode fazer um análogo. Deve-se especificar o final mesmo para métodos privados.
Estranho. Para o património público, o acesso máximo deve ser protegido e não privado.
E a função no exemplo está exactamente a ser sobrecarregada?
Estranho. Para o património público, o acesso máximo deve ser protegido, e não privado.
E no exemplo, a função está exactamente sobrecarregada?
Certo. Eu próprio acabei de o descobrir.
Se o fizer
BASE() {Func();} // вместо void Init() {Func();} Вызов Base.Init() - убрать конечно.pode verificar-se a si próprio depois de a executar e ver se sabe o que é suposto acontecer.
No diário de bordo terminal recebo
ir desajeitadamente para o local especificado no código fonte. Seria conveniente se pudesse fazer duplo clique sobre tal mensagem no diário de bordo do terminal e ir directamente para a linha especificada.
Se alguém o apoiar, fale alto.
O clássico é uma interface numa classe base com redefinição em descendentes:
Clássico é quando os métodos virtuais protegidos/públicos são anulados. Mas para o privado, não é tão óbvio (em termos de aplicação). Obrigado pela resposta.
Sim, já apaguei o meu exemplo sem ver a sua resposta, foi realmente lamentável.
Eu próprio fiquei confuso com o básico enquanto vos respondia. Tudo estava correcto nesse exemplo, eu não o deveria ter apagado. O mesmo exemplo mais uma vez com um exemplo de utilização:
Eu próprio fiquei confuso com o básico enquanto vos respondia. Tudo estava correcto nesse exemplo, eu não o deveria ter apagado. Mais uma vez com um exemplo de como o utilizar:
O compilador não faz um duque.
Este não é um bom exemplo, uma vez que não podemos ver a interface CAnimal a ser utilizada em qualquer lugar. Também dois descendentes foram tornados públicos. Compreendo o tema, por isso não há problema.
Exemplo normal. Um animal abstracto faz basicamente algum som, mas indefinido, por isso não podemos chamar-lhe o método Speak(); só pode ser chamado sobre um animal de uma espécie específica. Por conseguinte, declaramos um método virtual fechado numa classe de base, e anulamo-lo em descendentes e abrimo-lo.
Exemplo normal. Um animal abstracto faz basicamente algum som, mas indefinido, por isso não podemos chamar-lhe o método Speak(); só pode ser chamado sobre um animal de uma espécie específica. Por conseguinte, declaramos um método virtual fechado numa classe de base, e anulamo-lo em descendentes e abrimo-lo.