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,是的。已修复。