允许派生类从基本抽象类实现单个纯虚函数

时间:2011-08-28 03:25:17

标签: c++ inheritance abstract-class

是否可以拥有一个包含许多纯虚函数的抽象基类:

template <typename T, typename U = NullType, typename V = NullType>
class Functor { 
public:
    virtual ~Functor() {}

    virtual T operator()() = 0;
    virtual T operator()(U arg1) = 0;
    virtual T operator()(U arg1, V arg2) = 0;
};

然后派生类只实现其中一个函数?

e.g。

class Test : public Functor<void> {
public:
    void operator()() {
        std::cout << "Called Test::operator()" << std::endl;
    }
};

我有一个基础Functor类的原因是我可以在矢量中存储仿函数。

3 个答案:

答案 0 :(得分:2)

不,那是不可能的。如果您在T operator()(U)上拨打Test*并且尚未实施该怎么办?你最终必须有一个类实现它们(或者从一个或多个实现它们的类继承)来实例化它。

您可以保留任意数量的虚函数,但如果这样做,您的类将无法实例化,因为它仍然是抽象的。你必须从它继承另一个类并定义那些未定义的函数并实例化它。

tl; dr:要在类层次结构中的某个地方实例化一个类,所有虚函数都必须有一个定义。

答案 1 :(得分:2)

是的,这是可能的。但派生类仍然是抽象的。

答案 2 :(得分:2)

是的,这是可能的。但是,这意味着派生类本身仍然是抽象的,无法实例化,您需要从中进一步派生,直到您定义了所有虚函数。