virtual派生クラスのヘッダー ファイルにキーワードを配置するのがベスト プラクティスですか?
次に例を示します。
class A
{
public:
virtual void Func();
};
クラス B を次のように派生させますか。
class B : public A
{
public:
virtual void Func();
};
またはこれ:
class B : public A
{
public:
void Func();
};
virtual派生クラスのヘッダー ファイルにキーワードを配置するのがベスト プラクティスですか?
次に例を示します。
class A
{
public:
virtual void Func();
};
クラス B を次のように派生させますか。
class B : public A
{
public:
virtual void Func();
};
またはこれ:
class B : public A
{
public:
void Func();
};
オーバーライド指定子を使用するのがベスト プラクティスです。
オーバーライドがある場合、上記のリンクされた例に見られるように、仮想は冗長です。
はい、明示性は通常、ベスト プラクティスと見なされます。virtual関数をオーバーライドできる場合、言語は指定子が暗黙的に追加されることを指定しますが、それは「卑劣」です。
C++11 では修飾子overrideとfinal修飾子も追加されているため、完全に新しい関数を定義するのではなく、ベースを拡張していることを確認できます。
これらの修飾子には、仮想関数が必要です。それらは暗示的ではありませんvirtualが、暗黙的なものvirtualはそこにある必要があります。しかし繰り返しになりますが、明示性が最善のポリシーです。
一般に、必要に応じて明示することが最善です。派生クラスで関数をオーバーライドする場合は、それを指定する必要があります。その関数を再度オーバーライドするつもりがない場合は、それを final にします。宣言は、クラスのユーザーとの契約です。明確に (かつ簡潔に) すると、間違って使用される可能性が低くなります。