我试图确定在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)似乎并不喜欢后者。这里的故事还有更多吗?这些中的任何一个显然更可取吗?
答案 0 :(得分:1)
唯一真正的区别是我的代码编辑器(clion)似乎不喜欢后者。这里有更多的故事吗?
这两种方法都是在C:\\windows\sysWow64\Config\SystemProfile\ Desktop (Mine is 64 bit)
中公开Base
构造函数的有效方法。您的代码编辑器可能不完全了解Derived
功能。
其中任何一个明显更可取吗?
这可能取决于个人偏好,团队编码指南,需要在派生类中公开所有基类构造函数或仅公开子集等。我更喜欢第二种形式,因为它允许您使用一个继承所有基类构造函数代码行。如果您只需要公开基类构造函数的子集,那么第一种方法是唯一的方法。
答案 1 :(得分:1)
如果您想(几乎)公开每个Base ctor,请使用using
。你说的是“我可以像我父母那样建造。”
如果您想选择ctors,请使用第一个选项。从某种意义上说,你是独立描述如何构建的,所以它也有不同的含义。
你应该问问自己:如果Base
得到一个新的ctor,是否应该自动获得它?