关于qt:C ++ – 继承虚函数实现

C++ - Inherit Virtual Function Implementation

如果我要从一个类继承,我需要定义它的所有虚拟和纯虚拟函数吗?

例如,我有一个从QAbstractItemModel继承的派生类。QAbstractItemModel具有以下纯虚函数。如果派生类不使用index()parent()方法,我需要实现它吗?

1
2
3
4
5
6
7
//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;


您不必在派生类中实现任何东西,但是如果您将任何纯虚拟成员函数保留在没有实现的情况下,那么派生类仍然是抽象的(换句话说,您将无法实例化该类的对象)。

编辑:还有一些需要考虑的问题——如果您的基类包含派生类不需要的纯虚拟函数,那么是否值得考虑另一种设计呢?可能使用多个基类来声明接口的不同部分。

如果index()parent()不适用于QAbstractItemModel的所有派生类,那么我认为这些函数可能不属于QAbstractItemModel真的


对。将方法声明为纯虚拟("=0")意味着任何具体的子类(可以实例化)都必须实现它们。