Wenn Sie eine Member-Funktion offline definieren, welche Qualifikationsmerkmale müssen in der Deklaration / Definition / beiden enthalten sein?

Ich bin mir fast sicher, dass dies schon einmal gefragt wurde. Leider ist mein C ++ so verrostet, dass ich nicht einmal weiß, wonach ich suchen soll.

Gibt es eine leicht zu merkende Faustregel, die mir sagt, welche Qualifikanten inline, virtual, override, const, mutable, etc.) darf (a) nur in der Deklaration, (b) nur in der Definition, (c) sowohl in der Deklaration als auch in der Definition vorkommen, wenn ich eine Elementfunktion außerhalb der Zeile definiere?

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

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

Wenn ich definieren wolltePoint2::clone out-of-line, trial and error lässt mich glauben, dass dies der richtige Code wäre:

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

Point2* Point2::clone() const { … }
Dasvirtual undoverride Qualifikanten können erscheinennu in der Erklärung.const muss in @ erscheinbeid die Deklaration und Definition.

Ich möchte mich nicht für immer auf Versuch und Irrtum verlassen. Ich möchte jedoch explizit auf Qualifizierer eingehen (d. H. Sie wiederholen, auch wenn sie z. B. von einer Basisklasse impliziert werden). Gibt es eine allgemeine Regel, welche Qualifizierer genau wohin gehen müssen, oder sind die Regeln für jeden von ihnen unterschiedlich?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage