使用私有继承时哪种方式继承基础构造函数?

时间:2015-05-26 03:43:26

标签: c++ c++11

我试图确定在C ++ 11下使用私有继承时公开构造函数的两种方法之间的区别。

方法1:

class Base {
    public:
    int i;
    Base(int x): i(x) {}
};

class Derived : private Base {
    public:
    Derived(int x) : Base(x) {} // constructor method 1
};

方法2:

class Base {
    public:
    int i;
    Base(int x): i(x) {}
};

class Derived : private Base {
    public:
    using Base::Base;  // constructor method 2
};

在肤浅的测试中,两者似乎都是一样的。唯一真正的区别是我的代码编辑器(clion)似乎并不喜欢后者。这里的故事还有更多吗?这些中的任何一个显然更可取吗?

2 个答案:

答案 0 :(得分:1)

  

唯一真正的区别是我的代码编辑器(clion)似乎不喜欢后者。这里有更多的故事吗?

这两种方法都是在C:\\windows\sysWow64\Config\SystemProfile\ Desktop (Mine is 64 bit)中公开Base构造函数的有效方法。您的代码编辑器可能不完全了解Derived功能。

  

其中任何一个明显更可取吗?

这可能取决于个人偏好,团队编码指南,需要在派生类中公开所有基类构造函数或仅公开子集等。我更喜欢第二种形式,因为它允许您使用一个继承所有基类构造函数代码行。如果您只需要公开基类构造函数的子集,那么第一种方法是唯一的方法。

答案 1 :(得分:1)

如果您想(几乎)公开每个Base ctor,请使用using。你说的是“我可以像我父母那样建造。”

如果您想选择ctors,请使用第一个选项。从某种意义上说,你是独立描述如何构建的,所以它也有不同的含义。

你应该问问自己:如果Base得到一个新的ctor,是否应该自动获得它?