Cuál es un archivo ideal para usar override
identificador en c++ .h
o .cpp
?
guerra.h
class TimeStone : public InfinityStone
{
private:
bool capturedByThanos() override; #1
};
guerra.cpp
bool TimeStone::capturedByThanos() override #2
{
return true;
}
StoryTeller – Unslander Mónica
No puede poner un especificador de anulación al definir la función fuera de la especificación del miembro de la clase. El lenguaje no lo permite y un compilador se quejará. Así que en realidad sólo hay una opción.
Más allá de eso, esta opción también tiene más sentido. Al declarar la función, está expresando la intención de anularla. así que poniendo override
allá en el punto de expresar su intención tiene sentido. Eso es lo que le está pidiendo al compilador que verifique aquí, su intención de anular. La declaración también es suficiente para verificar que la función se declaró originalmente virtual y que obtuvo la firma correcta.
-
Específicamente, porque el
override
se aplica a la declaración del método, se puede verificar en cada unidad de traducción que incluye la definición de clase. Si se usara en el no-inline
definición de método fuera de clase, solo se puede verificar en la única TU que incluye la definición.– Arne Vogel
6 de noviembre de 2018 a las 17:47
En el encabezado seguramente es suficiente, pero ¿cómo anula un método privado no virtual?
– Adriano Repetti
6 de noviembre de 2018 a las 7:55
@AdrianoRepetti – ¿Cómo sabes que no es virtual? Presumiblemente
InfinityStone
lo define como virtual.– StoryTeller – Unslander Mónica
6 de noviembre de 2018 a las 7:57
@AdrianoRepetti no hay nada intrínsecamente malo con el código de los OP además de estar incompleto. En lugar de especular sobre cómo podría estar mal, podrías pedir el código que falta;)
– 463035818_no_es_un_número
6 de noviembre de 2018 a las 9:22
@AdrianoRepetti – RE: “y algunos compiladores lo permiten”. Te refieres a “compiladores conformes al estándar”. Y puede anular las funciones privadas muy bien. La anulación no es un acceso a la función, por lo que el control de acceso no es un problema.
– StoryTeller – Unslander Mónica
6 de noviembre de 2018 a las 11:09
@Adriano: estás haciendo una suposición incorrecta. Las funciones virtuales privadas están permitidas por el estándar, al igual que la anulación de una función virtual privada heredada. Puede que no tengan sentido para ti pero hay técnicas de diseño y expresiones idiomáticas que se basan exactamente en lo que dices y no tiene sentido.
– Pedro
6 de noviembre de 2018 a las 11:26