Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:为什么无法在派生类中访问受保护的构造函数?_C++_Protected - Fatal编程技术网

C++ C++;:为什么无法在派生类中访问受保护的构造函数?

C++ C++;:为什么无法在派生类中访问受保护的构造函数?,c++,protected,C++,Protected,受保护的成员应该可以从派生类访问。 那么,为什么我在下面的代码中出现编译错误呢 class A { protected: A() {}; }; class B : public A { public: void g() { A a; // <--- compiling error: "Protected function A::A() is not accessible ...". Why? } }; int main()

受保护的成员应该可以从派生类访问。 那么,为什么我在下面的代码中出现编译错误呢

class A {
protected:
    A() {};
};

class B : public A {
public:
    void g() { 
        A a; // <--- compiling error: "Protected function A::A() is not accessible ...". Why?
    }
};


int main() {
    B b;
    b.g();
}
A类{
受保护的:
A(){};
};
B类:公共A{
公众:
void g(){
A;//只能通过派生类访问,但只能通过派生类访问

类的
受保护的
成员只能访问

  • 对于该类的任何派生类的成员
    和朋友(直到C++17)
    ,但仅当访问受保护成员的对象的类是该派生类或该派生类的派生类时:
  • 所以,即使在派生类的成员函数中,也不能创建基类的独立对象

    换句话说,派生类的当前实例的
    受保护的
    成员可以访问,但是独立基类的
    受保护的
    成员不能访问

    class A {
    protected:
        int x;
    public:
        A() : x(0) {}
    };
    
    class B : public A {
    public:
        void g() {
            this->x = 42; // fine. access protected member through derived class
            A a;
            a.x = 42;     // error. access protected member through base class
        }
    };
    
    受保护的成员应该可以从派生类访问


    是的,但仅当通过
    指针访问时。在完全独立的对象上访问时不会。当
    B::g()
    尝试构造新的
    a
    对象时,您正在尝试这样做。

    @EduardoPascualAseff,是的。已修复。