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ではありません。Screen
mutable
だから、私の質問には2つの部分があります。内部の仕組みの一部を変更void Clear()
して作成する必要がありますか?void Clear() const
mutable
または、プログラムの残りの実行時間中に非定数メンバー関数にアクセスできるようにscreen
、クラスのメンバーをGame
クラスによって一度だけ設定できるようにする代替手段です。Game
助けてくれてありがとう。