Al definir una función miembro fuera de línea, ¿qué calificadores deben aparecer en la declaración / definición / ambos?

Estoy casi seguro de que esto se ha preguntado antes. Desafortunadamente, mi C ++ se ha vuelto tan oxidado que ni siquiera sé qué buscar.

¿Existe una regla práctica fácil de recordar que me diga qué calificadores (inline, virtual, override, const, mutable, etc.) debe aparecer (a) solo en la declaración, (b) solo en la definición, (c) tanto en la declaración como en la definición cuando defino una función miembro fuera de línea?

Ejemplo:
struct Geometry {
    …
    virtual Geometry* clone() const = 0;
};

struct Point2 : public Geometry {
    …
    virtual Point2* clone() const override { … }
};

Si quisiera definirPoint2::clone fuera de línea, prueba y error me lleva a creer que este sería el código correcto:

struct Point2 : public Geometry {
    …
    virtual Point2* clone() const override;
};

Point2* Point2::clone() const { … }
losvirtual yoverride pueden aparecer calificadoressolamente en la declaraciónconst debe aparecer enambos La declaración y la definición.

No quisiera confiar en el ensayo y error para siempre. Pero quiero ser explícito sobre los calificadores (es decir, repetirlos incluso si, por ejemplo, están implícitos en una clase base). ¿Existe una regla general sobre qué calificador debe ir exactamente a dónde, o las reglas son diferentes para cada uno de ellos?

Respuestas a la pregunta(3)

Su respuesta a la pregunta