给定以下代码:
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
,代码将编译。怎么解释呢?
最佳答案
为了创建一个对象,这样做所需的构造函数必须是可访问的。在 B
的成员中,您可以访问 A
的 protected 成员,但只能通过 B
类型的对象.所以你不能在那里访问 protected 默认构造函数。
上一行 A a();
编译因为它声明了一个函数。
关于c++ - 基类构造函数 protected 时在派生类成员函数中创建基类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29951564/