3

C++ に飛び込んでからしばらく経ちましたが、const-correct を含め、ベスト プラクティスに固執していることを確認したいと思います。

私は現在、ゲーム フレームワーク用のコードのライブラリを構築しており、次のクラスがあります (簡単にするために要約しています)。

class Screen
{
public:
    Clear();
}

class Game
{
private:
    Screen* screen;

protected:
    const Screen* GetScreen() const;
}

簡潔にするために残りの部分は省略しましたが、クラス インスタンスGameの作成はクラスが担当する、ということだけを述べておけば十分です。Screen作成後は、GetScreen()メソッドを介してのみアクセスする必要があります。

アイデアは、新しいゲームを作成するときに、この基本クラスから継承するということです。たとえば、レンダリング ループ中に画面をクリアして、次のフレームを再描画する必要があります。さて、上記の定義では、Clear()メソッドを使用するときにメソッドを呼び出すことは許可されてGetScreen()いませんconst。clear メソッドは、実際にはクラスの内部動作を変更します (以前に表示された画像がクリアされるという事実により)。そのため、const宣言を定義から除外しました。私がそれを作成した場合、クラスconstの内部動作のいくつかが必要になりますが、私が読んだことから、これは非常にconst-correctではありません。Screenmutable

だから、私の質問には2つの部分があります。内部の仕組みの一部を変更void Clear()して作成する必要がありますか?void Clear() constmutable

または、プログラムの残りの実行時間中に非定数メンバー関数にアクセスできるようにscreen、クラスのメンバーをGameクラスによって一度だけ設定できるようにする代替手段です。Game

助けてくれてありがとう。

4

3 に答える 3