8

私はこの質問が非常に基本的であることを知っていますが、いくつかの出版物(Webサイト、本)で異なるスタイルのオーバーライド仮想関数に会いました。つまり、基本クラスがある場合:

class Base
{
public:
virtual void f() = 0;
};

一部の出版物では、これを無効にするために、一部の著者が次のように言うだけであることがわかりました。

void f();     

また、void の前に virtual キーワードを繰り返すものもあります。どの形式の上書きが適切ですか? 回答ありがとうございます。

4

3 に答える 3

14

これは純粋に好みの問題です。いくつかのスタイルの自己文書化の価値と他のスタイルの非冗長性に関して、いくつかの弱い議論を行ったり来たりすることができます。

于 2010-03-14T19:05:03.950 に答える
3

サブクラスでオーバーライドするメソッドに virtual キーワードを追加する必要はありません。この修飾子は、サブクラス宣言で省略しても削除できないためです。

ただし、基本クラスでどの派生関数が仮想であるかを説明するため、virtual キーワードを繰り返すことをお勧めします。

これは、 「High Integrity C++ Coding Standard Manual」でも推奨されています。

C++ FAQにリンクされています。

于 2010-03-15T01:53:16.747 に答える
0

私は個人的に両方のスタイルを使用しています:virtualメソッドをオーバーライドできることを意味します。

したがって、次の 2 つのケースがあります。

  • メソッドがオーバーライドされる可能性があることをクラスのユーザーに知らせたい場合は、virtualキーワードを使用します
  • この事実を隠したい場合 (たとえば の後に新しいメソッドを提供するため)、キーワードTemplate Patternを使用しないでください。virtual

キーワードを (ab?) 使用するさらに別の方法だと思います。

于 2010-03-15T09:13:22.003 に答える