给出以下代码:
class A
{
protected:
A(){}; // compilation error
public:
void foo(){cout << "A\n";};
};
class B : public A
{
public:
B() { };
void foo(){
cout << "B\n";
A A(); // OK
A a1; // compilation error
}
};
如果将基类
A
构造函数更改为public
,则代码将编译。怎么解释呢? 最佳答案
§11.4/ 1:
在您的情况下,访问是隐式的,但是仍然存在。我们正在尝试使用(隐式)对象参数A
访问a1
的构造函数。 §11/ 6:
但是,a1
的类型不是B
或从B
派生的类。因此,我们的上述要求未得到满足,访问控制也不满意。
关于c++ - 当基类构造函数 protected 时,在派生类成员函数中创建基类实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29951564/