【问题标题】:which way to inherit base constructor when using private inheritance? [duplicate]使用私有继承时继承基构造函数的方式是什么? [复制]
【发布时间】:2015-08-07 13:38:46
【问题描述】:

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

方法一:

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

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

方法二:

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

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

在表面测试中,两者的工作方式似乎相同。唯一真正的区别是我的代码编辑器(clion)似乎不喜欢后者。这里还有更多的故事吗?这些中的任何一个都明显更可取吗?

【问题讨论】:

    标签: c++ c++11


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      这两种方法都是在Derived 中公开Base 构造函数的有效方法。您的代码编辑器可能不完全了解 C++11 功能。

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

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

      【讨论】:

        猜你喜欢
        • 2015-10-07
        • 1970-01-01
        • 2012-04-16
        • 2011-10-30
        • 2015-03-27
        • 1970-01-01
        相关资源
        最近更新 更多