给出以下代码:

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/

10-11 15:14
查看更多