私はクラスを持っています。それをAと呼びましょう。そのクラス定義内には次のものがあります。
static QPainterPath *path;
つまり、パス オブジェクトへの静的な (クラス全体の) ポインターを宣言しています。このクラスのすべてのインスタンスは、同じ共有データ メンバーを持つようになります。このクラスに基づいて構築し、より特殊な形式にサブクラス化し、動作を階層化し、各クラスが独自のパス オブジェクトを持ちます (ただし、バウンディング ボックスの計算やペイント ルーチンの呼び出しなどの退屈なビットを繰り返す必要はありません)。 )。
クラスFを作成するためにサブクラス化する場合(たとえば)、FでAから継承された描画ルーチンを使用する必要がありますが、Fで宣言された静的(クラス全体)のパスオブジェクトを使用します。上記の宣言をプライベート セクション (および派生クラス F でそれを繰り返します) を保護セクションに配置しようとしましたが、すべて喜びがありませんでした。
なぜこれが起こっているのか、私はある程度見ることができます:
void A::paint() {
this->path...
オブジェクトがクラス F であっても、F::path ではなく A::path を参照しています。
これを回避し、基本クラスで定義された描画コードを引き続き使用し、すべてのクラス (おそらく基本クラスを除く) を実際にインスタンス化できるようにしながら、各クラスが静的パス オブジェクトを維持できるようにするエレガントな方法はありますか?