C++ では、いくつかの基本クラス (Base など) 内に仮想関数がある場合、この仮想関数をオーバーライドしたい場合、この仮想関数を再度宣言して、派生クラスでもコンパイルできるようにする必要があります。
class Base {
public:
virtual void virtualFunction();
static int s_whatSoEver[];
private:
void _privateFunction();
}
class Derived {
public:
virtual void virtualFunction();
}
仮想関数プロトタイプを変更したい場合は、派生物のすべての宣言を変更する必要があるため、これはばかげていませんか?
また、ヘッダー ファイルはパブリック インターフェイスの定義に使用され、このインターフェイスを使用するユーザーはそれらをまったく気にする必要がないため、ヘッダー ファイル内で保護された関数またはプライベート関数を宣言する必要があるのはなぜですか? おそらく、Objective-C と同じように、.cpp ファイルでプライベートまたは保護された関数を直接実装して宣言することができます。
C++ には静的初期化子もありません。静的クラス変数を初期化したい場合は、このためのクラスを作成する必要があります。
class BaseStaticVariableInitializer {
public:
BaseStaticVariableInitializer() {
Base::s_whatSoEver = new int[20];
for (int i = 0; i < 20; i++) {
s_whatSoEver[i] = xxx;
}
}
~BaseStaticVariableInitializer() {
delete [] Base::s_whatSoEver;
}
}
具体的には、静的クラス定数を初期化します。
static BaseStaticVariableInitializer s_baseStaticVariableInitializer;
無知で申し訳ありませんが、DRY に適合するように C++ コードを記述する正しい方法は何ですか?