1

クラスから継承する場合、その仮想関数と純粋仮想関数をすべて定義する必要がありますか?

たとえば、から継承している派生クラスがありQAbstractItemModelます。QAbstractItemModelには、次の純粋仮想機能があります。派生クラスがindex()andparent()メソッドを使用しない場合、それを実装する必要がありますか?

//qabstractitemmodel.h
virtual QModelIndex index(int row, int column,
                              const QModelIndex &parent = QModelIndex()) const = 0;
virtual QModelIndex parent(const QModelIndex &child) const = 0;
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const = 0;
virtual int columnCount(const QModelIndex &parent = QModelIndex()) const = 0;
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const = 0;
4

2 に答える 2

3

派生クラスに何も実装する必要はまったくありませんが、純粋仮想メンバー関数のいずれかを実装せずに残した場合、その派生クラスは依然として抽象的です (つまり、そのクラスのオブジェクト)。

編集: 他に考慮すべきこと - 基本クラスに、派生クラスが必要としない純粋仮想関数が含まれている場合は、代替設計を検討する価値がありますか? おそらく、インターフェイスのさまざまな部分を宣言する複数の基本クラスを使用しています。

のすべての派生クラスに適用されない場合index()、それらの関数は実際には属していない可能性があると主張しますparent()QAbstractItemModelQAbstractItemModel

于 2012-04-09T20:49:24.437 に答える
2

はい。メソッドを純粋仮想 (' = 0') として宣言するということは、具体的なサブクラス (インスタンス化できる) がそれらを実装する必要があることを意味します。

于 2012-04-09T20:49:43.673 に答える