Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Pregunta. Después de declarar una función virtual con un determinado conjunto de parámetros y tipos en una clase padre, ¿es posible cambiar el número y los tipos de parámetros de las funciones virtuales correspondientes en las clases descendientes?
Por un lado, el Manual de Referencia afirma que "una función virtual puede ser sustituida en una clase derivada . Laelección de ladefinición de la función a la que se llama para la función virtual se hace de forma dinámica (en tiempo de ejecución). Un caso típico es cuando una clase base contiene y las clases derivadas tienen sus propias versiones de esa función". Por otra parte, los ejemplos que se dan en el Manual de referencia se refieren a casos en los que las funciones virtuales tienen cuerpos de definición de funciones diferentes y no cabeceras de definición de funciones.
Que yo recuerde es posible. Pero hay que tener mucho cuidado con los tipos y el número de parámetros.
También hay que tener cuidado con los tipos de valores pasados y los valores por defecto.
He aquí algunos ejemplos para simplificar.
Esta variante servirá para ello.
Este no lo hace (o mejor dicho, quizá funcione pero con algunos fallos y ciertas reservas).
Lo mismo ocurre cuando se recargan los métodos dentro de una clase.
Sólo una copia exacta de la definición, a excepción de la configuración por defecto (los valores predeterminados pueden variar, pero es mejor no usar esto)
Interesante, según tengo entendido, la virtualización de funciones y la sobrecarga de funciones son cosas ligeramente diferentes. Ymql5 dice que en la virtualización de funciones debe haber una copia dura de la cabecera de la función (no tengo en cuenta los parámetros por defecto).
Interesante, según tengo entendido, la virtualización de funciones y la sobrecarga de funciones son cosas un poco diferentes. Ymql5 dice que en la virtualización de funciones debe haber una copia dura de la cabecera de la función (no estoy teniendo en cuenta los parámetros por defecto).
> Pregunta. Tras la declaración de una función virtual con un determinado conjunto de parámetros y sus tipos en una clase padre, ¿es posible cambiar el número y los tipos de parámetros de las funciones virtuales correspondientes en las clases descendientes?
Si he entendido bien, el hijo debe sobrecargar la funcionalidad del ancestro.
Francamente, no recuerdo haber hecho esas cosas con virtual (creo que sí), pero la afirmación sobre la sobrecarga es cierta: yo mismo cometí ese error una vez.
PS
Si todo se hace correctamente, según tengo entendido, el número de parámetros puede aumentar y disminuir. Las dificultades serán si el número de parámetros sigue siendo el mismo, pero sus tipos cambian...
De todos modos, he esbozado este ejemplo:
Resulta que, independientemente de si un método de función está sobrecargado o no en la clase C_C, se puede llamar a una función virtual con sólo tres parámetros - pointer.function(a1,a2,a3). En consecuencia, el programa nunca llegará al método de dos parámetros de la clase C_C cuando llame a las funciones virtuales. ¿Verdad?
De todos modos, he esbozado este ejemplo:
Resulta que, independientemente de si un método de función está sobrecargado o no en la clase C_C, se puede llamar a una función virtual con sólo tres parámetros - pointer.function(a1,a2,a3). En consecuencia, el programa nunca llegará al método de dos parámetros de la clase C_C cuando llame a las funciones virtuales. ¿Verdad?
Analizar lo que hace el programa insertando en constructores y destructores impresiones con la macro __FUNCTION__, será muy útil.
También añadiría que al declarar un puntero a una clase base, se construye un "túnel" hacia los descendientes a través de la clase base. Así, el compilador, al llamar a los descendientes de esta manera, sólo verá las funciones declaradas en la clase base. Si usted (incluso dentro del mismo programa) declara un objeto descendiente directamente, todas las funciones estarán disponibles en él.
De todos modos, he esbozado este ejemplo:
Resulta que, independientemente de si un método de función está sobrecargado o no en la clase C_C, se puede llamar a una función virtual con sólo tres parámetros - pointer.function(a1,a2,a3). En consecuencia, el programa nunca llegará al método de dos parámetros de la clase C_C cuando llame a las funciones virtuales. ¿Verdad?
Por mi propia experiencia puedo recomendarte que empaques el código de la siguiente manera
Y puedes ver el archivo adjunto como ejemplo y entretenimiento.
No quería molestarme con punteros y new, así que simplemente declaré la clase de trabajo como una variable.
El Asesor Experto genera un número aleatorio 0/1 en intervalos de tiempo iguales y dependiendo del resultado realiza una de las dos funciones: MarketBuy / MarketSell.
Puedes hacerlo así si quieres
Pero en este caso puede producirse un error debido al conflicto con
PS
Lo hice a mano, por eso puede haber algunas inexactitudes.
Pero, en principio, la idea básica puede entenderse.
Muchas gracias por los valiosos consejos y orientaciones. Definitivamente los utilizaré, pero me gustaría tener suficiente tiempo para la teoría y la práctica.
Por mi propia experiencia, puedo recomendar que se complete el código
¿Por qué es así? ¿Cuál es el escollo?
Antes había un problema con eso, creo. Pero ahora no recuerdo cuáles.
De todos modos, me acostumbré a ello.
Normalmente no hay diferencia, por supuesto, al menos en mi ejemplo probé a intercambiar lugares y todo funcionó...
Creo que antes había un problema con eso. Pero ahora no recuerdo cuáles.