自动实现调用特定基类构造函数的构造函数

时间:2015-01-16 19:24:30

标签: c++

class A
{
    A(int a);
};

class B : public A
{
    using A::A; // Shorthand for B(int b) : A(b) {}?
};

int main()
{
    B b(3);

    return 0;
}

是否有某种方法可以实现上述程序所寻求的目标(使B具有一个具有相同参数的构造函数作为基类')?这是正确的语法吗?

如果是这样,它是C ++ 11/14的功能,还是可以在C ++ 03中完成?

2 个答案:

答案 0 :(得分:6)

  

是否有某种方法可以实现上述程序所寻求的目标(使B具有一个具有相同参数的构造函数作为基类')?

是的,有。使用继承构造函数

using A::A;
  

这是正确的语法吗?

  

如果是这样,它是C ++ 11/14的功能,还是可以在C ++ 03中完成?

此功能是在C ++ 11中引入的。它在C ++ 03中无效。

有关详细信息,请参阅此using declaration参考的相关部分。

答案 1 :(得分:3)

是的,就像那样(一旦我清理了你无关的错误):

struct A
{
    A(int a) {}
};

struct B : A
{
    using A::A; // Shorthand for B(int b) : A(b) {}?
};

int main()
{
    B b(3);
}

live demo

这些被称为继承构造函数,并且是自C ++ 11以来的新版本。