次のような状況があります。スーパークラスconst
のメンバーを宣言しましたが、リスト初期化子を使用して、そのサブクラスの 1 つのコンストラクター内で初期化したいと考えています。
struct Shape {
public:
const Rect boundingRect; // the rect in which the shape is contained
};
struct Stain : Shape
{
public:
Stain(Rect boundingRect_) : boundingRect(boundingRect_) {}
};
これが可能かどうかはわかりません。上記の簡単な方法を使用すると、コンパイラは次のメッセージを表示します。
member initializer 'boundingRect' does not name a non-static data member or base class
この回答は、サブクラスのコンストラクターのリスト初期化子でスーパークラスのメンバー変数を初期化できない理由を説明しています。そのような状況でのベストプラクティスは何だろうかと思いますか?