C ++ - 继承虚函数实现

时间:2012-04-09 20:45:46

标签: c++ qt

如果我要继承一个类,我是否必须定义其所有虚拟和纯虚函数?

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

//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;

2 个答案:

答案 0 :(得分:3)

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

修改 还需要考虑的其他事项 - 如果你的基类包含你的派生类不需要/不需要的纯虚函数,那么可能值得看一个替代设计?也许使用多个基类来声明接口的不同部分。

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

答案 1 :(得分:2)

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