【问题标题】:C++ - Inherit Virtual Function ImplementationC++ - 继承虚函数实现
【发布时间】:2012-04-22 04:54:50
【问题描述】:

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

例如,我有一个继承自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;

【问题讨论】:

标签: c++ qt


【解决方案1】:

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

编辑: 需要考虑的其他事项 - 如果您的基类包含您的派生类不想要/不需要的纯虚函数,也许值得考虑另一种设计?也许使用多个声明接口不同部分的基类。

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

【讨论】:

  • 我见过一个派生类故意与基类过时的情况,因为规范已更改并创建了新类。虽然您可以在过时的派生类上调用基类函数,但它没有任何效果。这一切都取决于您的整体设计。还不错就是不理想。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 2015-08-23
    • 2015-08-07
    相关资源
    最近更新 更多