BigOrSmallのコードの内容で1点、質問となります。
ファイル名:Base .h
「Base() = delete;」でデフォルトコンストラクタを削除している目的は何でしょうか。
(上記コードを記載する必要性が分からなかったので)
Baseクラスは抽象クラスなので本体は存在がしないクラスです。
存在してはいけないクラスですのでコンストラクタが呼ばれないように関数を削除(delete function)したことが「Base() = delete;」の意味です。
関数を削除すると削除した関数を呼ぶ時にコンパイルエラーが発生しますので結果、コンストラクタが呼ばれれない = 生成できないことになります。
抽象クラスはc++、java, python等、オブジェクト指向プログラミングで重要な概念ですのでちゃんと理解しておきましょう。
グーグルで検索すれば抽象クラスに関して色々なドキュメントを見えます。
ご回答ありがとうございます。
抽象クラスでは、コンストラクタは呼ばれない(インスタンス化してはいけない)こと承知しました。
関連してもう1点質問になりますが、
同ファイルで、引数付きの方(「Base(const State state) : state_(state) {}」)は、
設定していても問題ない理由は何なのでしょうか。
そのコンストラクタはBaseを継承するクラスのインスタンスを作るために使いますので問題ありません。
例えばGameクラスのコンストラクタには
Game() : Base(State::Game) {}
こんな風に使っています。
Baseを継承してるGameクラスを初期化するために使っています。
ご回答ありがとうございます。上記のような書き方ができるのですね。
CppProjectsのファイルを編集して試したところ、同じ挙動になること確認できました。