相关疑难解决方法(0)

为什么允许在派生类中调用受保护的静态方法?

在派生类中调用一个受保护的构造是不允许的,因为解释在这里.

接受的答案解释了,只有当类的对象是类的子对象时,才protected允许访问基类对象的成员.到现在为止还挺好.AAB

但是,为什么允许(至少在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
    }
};
Run Code Online (Sandbox Code Playgroud)

从哲学上讲,构造函数非常类似于返回类对象的静态方法A,这就是为什么我在这里没有得到行为差异的原因.

c++ inheritance

10
推荐指数
1
解决办法
7573
查看次数

标签 统计

c++ ×1

inheritance ×1