xml*_*lmx 17 c++ oop inheritance constructor c++11
考虑:
class A
{
protected:
A(int) {}
void f(int) {}
public:
A() {}
};
class B : public A
{
public:
using A::A;
using A::f;
};
int main()
{
B().f(1); // ok
B(1); // error: 'A::A(int)' is protected within this context
}
Run Code Online (Sandbox Code Playgroud)
为什么不能创建继承的protected
构造函数public
,而继承的protected
成员函数可以?
son*_*yao 11
与其他成员不同,引入继承构造函数的 using 声明的可访问性被忽略。
(强调我的)
由using-declaration创建的同义词具有member-declaration的通常可访问性。一个使用说明符名称一个构造函数不创建一个同义词; 相反,如果附加构造函数在用于构造相应基类的对象时可访问,则它们是可访问的,并且忽略using 声明的可访问性。