c++ - 如果抽象基类是一个接口(interface),是否必须在派生类构造函数中调用基类构造函数?

标签 c++ oop constructor class-design abstract-class

class AbstractQuery {
    virtual bool isCanBeExecuted()=0;
public:
    AbstractQuery() {}
    virtual bool Execute()=0;
};

class DropTableQuery: public AbstractQuery {
    vector< std::pair< string, string> > QueryContent;
    QueryValidate qv;
public:
    explicit DropTableQuery(const string& qr): AbstractQuery(), qv(qr) {}
    bool Execute();
};

派生类构造函数中是否需要调用基类构造函数?

最佳答案

不,事实上因为基类没有必要有一个显式定义的构造函数(但要确保你有一个虚析构函数)。

所以对于一个典型的界面,你可以有这样的东西:

class MyInterface {
public:
    virtual ~MyInterface() {}
    virtual void execute() = 0;
};

编辑:这是你应该有一个虚拟析构函数的原因:

MyInterface* iface = GetMeSomeThingThatSupportsInterface();
delete iface; // this is undefined behaviour if MyInterface doesn't have a virtual destructor

关于c++ - 如果抽象基类是一个接口(interface),是否必须在派生类构造函数中调用基类构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/270592/

相关文章:

c++ - 我的 fstream 总是返回 true,即使文件名错误?

java - child 没有继承其 parent 的一些属性/行为?

c++ - C++中实例变量的算法初始化

c++ - 为什么成员 `float x` 在 main() 中为对象 `0.` 和 `a` 初始化为 `b`?

c++ - 当 const 引用参数绑定(bind)到右值时,它是否保留其 "status"?

Php代码显示偏移量错误

class - 面向对象编程中什么是公共(public)、私有(private)和 protected ?

java - 调用 set 方法而不调用构造函数

c++ - 结构初始化参数

c++ - 合并排序算法。合并功能不起作用