【发布时间】:2013-05-30 14:10:08
【问题描述】:
不允许在派生类中调用受保护的构造函数,如 here 所述。
接受的答案解释说,protected 仅在 A 类的对象是 B 类的子对象时才授予对基类 A 对象成员的访问权限。到目前为止,一切顺利。
但是,为什么允许(至少在 GCC 4.6.3 中)调用静态保护方法?具体来说,以下编译对我来说没有任何意义,而注释行则没有:
class A
{
protected:
A() {}
static A makeA() { return A(); }
};
class B: public A
{
public:
static A makeAFromB()
{
return makeA(); // compiles
// return A(); // does not compile
}
};
从哲学上讲,构造函数非常类似于返回类 A 的对象的静态方法,这就是为什么我在这里没有得到行为差异的原因。
【问题讨论】:
-
您应该将
return A::A()更改为return A()。它仍然无法编译,但这次将是与protected访问相关的原因,使问题更加清晰。 -
你说得对,已编辑。
标签: c++ inheritance