首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >继承构造函数并另外添加

继承构造函数并另外添加
EN

Stack Overflow用户
提问于 2018-09-10 18:07:40
回答 1查看 65关注 0票数 0

我有一个Saver类(从QObject派生)和一个,它是从这个Saver类(Creator)派生的。在Saver类中,我定义了一些构造函数,我想在初始化Creator类时使用这些构造函数。但是我在Creator类中也有额外的构造函数。我用:

代码语言:javascript
复制
Saver::Saver

在Creator类中继承构造函数,并且它运行良好,除非我添加了其他构造函数。下面是这些类的头:

代码语言:javascript
复制
class Saver : public QObject
{
    Q_OBJECT
public:
    explicit Saver();
    explicit Saver(QVector<QOpenGLVertexArrayObject *> vaos);
    explicit Saver(QVector<QOpenGLTexture *> textures);
};


class Creator : public Saver
{
    Q_OBJECT
public:
    using Saver::Saver;
    //Works well unless I add the following two lines
    Creator(QVector<Creator *> creators);
    Creator(Creator *creator);
};

我是否需要重新定义所有构造函数(比本例中有更多的构造函数),还是有其他解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-10 18:47:44

这里有一个重复问题的Minimal, Complete, and Verifiable example

代码语言:javascript
复制
struct type_a {};
struct type_b {};

class Saver
{
   public:
      explicit Saver() {}
      explicit Saver(type_a) {}
};


class Creator : public Saver
{
   public:
      using Saver::Saver;
      Creator(type_b) {}
};

int main()
{
   Creator c1;
   Creator c2(type_a{});
   Creator c3(type_b{});
};

解决该问题的一种方法是从基类的默认构造函数中删除explicit限定符,并在派生类中添加默认构造函数的默认实现。

代码语言:javascript
复制
struct type_a {};
struct type_b {};

class Saver
{
   public:
      Saver() {}
      explicit Saver(type_a) {}
};


class Creator : public Saver
{
   public:
      using Saver::Saver;
      Creator() = default;
      Creator(type_b) {}
};

int main()
{
   Creator c1;
   Creator c2(type_a{});
   Creator c3(type_b{});
};

解决此问题的另一种方法是在初始化程序列表中显式使用基类的默认构造函数。您仍然需要在派生类中添加默认构造函数的默认实现。

代码语言:javascript
复制
struct type_a {};
struct type_b {};

class Saver
{
   public:
      explicit Saver() {}
      explicit Saver(type_a) {}
};


class Creator : public Saver
{
   public:
      using Saver::Saver;
      Creator() = default;
      Creator(type_b) : Saver() {}
};

int main()
{
   Creator c1;
   Creator c2(type_a{});
   Creator c3(type_b{});
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52263259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档