![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Yaah... Como as pessoas estão confusas com const(((.
Para entender métodos com especificador const const
Agora faça
//int Get() const {return i;}
e depois fazer o inverso:
// int Get() {return 2*i;}
)))
Também uma variante do mesmo código.
É com os contras.
E você está certo de que a entrada
♪ você sempre alimentará ♪
para escrever sem verificação?
?
a variante sem a constituição já que a classe base não tem referência aos parâmetros de entrada também funcionará corretamente, embora este estilo não seja muito inteligente
Não vai funcionar dessa forma. Você não pode alterar a assinatura no Comparar. É necessário principalmente para o método QuickSort, que está incluído no SB, para fazer a triagem regular.
Se você mudar a assinatura, não é uma anulação da função virtual, mas uma sobrecarga e é o método de chamada da classe base CObject onde retorna 0;
É claro que isto pode ser resolvido com embalagens (decoração) para recipientes, mas por que estes movimentos desnecessários, ou então não usam SB e escrevem tudo do zero.
Parece ser o mesmo que o seu, só que com menos letras. Portanto, é uma questão de gosto, mas eu removi a variável extra (muito provavelmente, o compilador a teria removido como parte da otimização).
A respeito da minha verificação do !nó. Deve ser substituído por CheckPointer(node)==POINTER_INVALID, mas é uma sobrecarga - uma chamada de função. Mesmo que seja alinhada, ainda assim é pelo menos desreferenciada e verificada a bandeira de status. Se apenas biblioteca ou concreto, você escreveu um programa de comparação de métodos, melhor !nodo e em código para observar o ponteiro inválido. Se você é preguiçoso demais para ficar atento aos ponteiros ou se é uma biblioteca para os pontos fracos, apenas CheckPointer(node)==POINTER_INVALID.
Se você remover o especificador constante que você destacou, não poderá chamar estes métodos de um objeto constante.
UPD: a verificação destacada pode ser removida, como está nos chamados métodos.
Vladimir, só neste caso o CheckPointer é redundante. dynamic_cast retornará NULL para qualquer elenco falhado, inclusive se o ponteiro estiver quebrado. Por favor, me corrija se eu estiver errado. Testado há muito tempo, o teste demorou 5 segundos).
Mecanismo de funcionamento do CheckPointer (em palavras simples, não sou fluente em termos de baixo nível) - parece por ponteiro que tipo de objeto, dinâmico ou estático, se não podemos obter informações, significa POINTER_INVALIDO. Este pode ser o caso se o objeto dinâmico foi removido, outras situações que não conheço, ou carregou lixo para o ponteiro, mas deve verificar o compilador, se você não conseguir encontrar lacunas.
e dynamic_cast faz o mesmo, verificando também se o ponteiro pode ser lançado ao tipo desejado, ou seja, se é um ponteiro deste tipo ou uma classe infantil.
Se o ponteiro estiver quebrado, o dynamic_cast não detecta nada e retorna NULL.
É por isso que eu não usei o CheckPointer. Mas costumo usar este cheque em todos os lugares, fora do caminho do perigo. Afinal de contas, para encontrar um erro no software, que não cai, parece um pouco mais fácil).
E que tal não-constrição - em teoria podemos ter um método como GetRatingByAnyFormula() { m_rating01=Formula01(); return m_rating01;}
seria bastante inconveniente se não fosse usado na classificação imediatamente, ou seja, teríamos que contar primeiro a classificação e depois chamar a classificação por ela. Ou, como já foi dito, escreva sua própria SB a partir do zero).
Isto não é bom. A assinatura não pode ser alterada no Comparativo. É principalmente com o objetivo de fazer funcionar o QuickSort, o método de triagem regular incluído no SB.
Se você mudar a assinatura, não se sobrepõe à função virtual, mas se chama sobrecarga e método da classe base CObject, onde retorna 0;
É claro que isso pode ser resolvido com embalagens (decoração) para recipientes, mas por que esses movimentos desnecessários, ou não usam SB e escrevem tudo do zero?
A maneira mais correta é não escrever em µl
Vladimir, neste caso o CheckPointer é redundante. dynamic_cast retornará NULL para qualquer elenco mal sucedido, inclusive se o ponteiro estiver quebrado. Por favor, me corrija se eu estiver errado. Testado há muito tempo, o teste demorou 5 segundos).
Mecanismo de funcionamento do CheckPointer (em palavras simples, não sou fluente em termos de baixo nível) - parece por ponteiro que tipo de objeto, dinâmico ou estático, se não conseguimos obter informações, significa POINTER_INVALIDO. Este pode ser o caso se o objeto dinâmico foi removido, outras situações que não conheço, ou carregou lixo para o ponteiro, mas deve verificar o compilador, se você não conseguir encontrar lacunas.
e dynamic_cast faz o mesmo, verificando também se o ponteiro pode ser lançado ao tipo desejado, ou seja, se é um ponteiro deste tipo ou uma classe infantil.
Se o ponteiro estiver quebrado, o dynamic_cast não detecta nada e retorna NULL.
É por isso que eu não usei o CheckPointer. Mas costumo usar este cheque em todos os lugares, fora do caminho do perigo. Afinal de contas, para encontrar um erro no software, que não cai, parece um pouco mais fácil).
E quanto à não-constrição - em teoria podemos ter um método como GetRatingByAnyFormula() { m_rating01=Formula01(); return m_rating01;}
seria bastante inconveniente se não fosse usado na classificação imediatamente, ou seja, teríamos que contar primeiro a classificação e depois chamar a classificação por ela. Ou você pode escrever sua própria SB a partir do zero, como já mencionado).
Sobre minha verificação de !nodo. Deve ser substituído por CheckPointer(node)==POINTER_INVALID, mas esta é uma chamada de função, de sobrecarga.
O problema não estará nas despesas gerais, mas no fato de que um ponteiro quebrado mudará a lógica do programa. Ou seja, em vez de detectar o problema, você o enterrará ainda mais fundo.
CheckPointer só deve ser usado para fins de depuração ou como uma implementação de um ponteiro fraco.
1. Nenhum argumento, mas o que eu estava dizendo é que você NÃO precisa de um CheckPointer (mesmo para underdogs), porque dynamic_cast NÃO pode retornar um ponteiro não-invalido, apenas NULL.
2. É até interessante, mas não posso pensar imediatamente em um exemplo que permita obter um ponteiro não-invalido, a não ser matar o objeto dinâmico ou a memória "suja" diretamente enquanto se trabalha nele.
Suponho que ainda existam tais meios, mas o mais provável é que todos eles se encontrem no plano de contornar as verificações do compilador.
3,4 De acordo.
P.S.
Devo ter me enganado em relação ao 1-st. O teste diz o contrário. Deve ser apenas uma impressão).
Uma matriz estática pode ser declarada na seção de classe pública e rubricada no construtor? (como abaixo) (ou apenas elemento por elemento?)
Você pode rubricar um array local e executar um ArrayCopy para o campo de array apropriado: