2016-11-05 12 views
3

私のクラスにはstatic const std::vector<SomeType>フィールドがあります。私はこのフィールドを使用する2つのメソッド(検索メソッド)を持っています。 私のクラスの他のメンバーは使用しません。彼らはstaticまたは通常の方法として定義する必要がありますか?静的メソッドを使用する静的メソッドまたは非静的メソッド

どうすればよいですか?利点/欠点は何ですか?

答えて

3

静的メンバーのみを参照するメソッドは、通常は静的に定義する必要があります。これにより、クラスのインスタンスを作成せずにこれらのメソッドにアクセスしたり、静的コンテキスト(非メンバ関数など)からアクセスしたりすることができます。

唯一の例外は、定義されたメンバー関数からこのアクセスを行う必要がある場合です。この場合、静的関数は仮想関数をオーバーライドできないため、関数を静的にするオプションはありません。

+0

'から始まる部分は*非連続*です。静的メソッドをオーバーライドできるかどうかは、仮想メソッドから呼び出すことができるかどうかとは関係ありません。 – EJP

+0

@EJP静的メンバー関数をオーバーライドできないとは言いませんでした。私が言っているのは、静的メンバー関数は基本クラスの仮想関数をオーバーライドできないということだけです。つまり、基本クラスの仮想関数のオーバーライドとして関数を記述する場合は、静的なメンバだけにアクセスしても非静的にする必要があります。 – dasblinkenlight

関連する問題