我有一个基类和许多派生类。
派生类的构造函数都需要调用一个具有相同签名的函数reset()
。因此,我想在基类中声明一个纯虚函数 virtual void reset() = 0
作为接口(interface)。
但是,问题是:
它不应该在构造函数中调用虚函数。
但我希望reset()
是基类提供的接口(interface)。这样所有的派生类都要分别实现reset。
我该怎么办?
最佳答案
与其强制他们调用一个函数(无论如何你都不能保证),不如让基类构造函数期望一个包含你需要的行为的参数。
这样,基类是自包含的,并且在其构造函数运行时具有所有必需的信息。
例如,如果您正在考虑这样的事情:
class Base
{
public:
Base()
{
reset();
}
protected:
virtual void reset() = 0;
void setValue(int value);
};
class Derived : public Base
{
public:
void reset() override
{
setValue(20);
}
};
你可以这样做:
class Base
{
public:
explicit Base(int value)
{
setValue(value);
}
private: // can be private
void setValue(int value);
};
class Derived : public Base
{
public:
Derived()
: Base(20)
{
}
};
关于c++ - 派生类的构造函数调用的函数在基类中不应该是纯虚拟的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56753454/