C++:为什么无法在派生类中访问受保护的构造函数?
C++: Why Protected Constructor Cannot be Accessed in the Derived Class?
受保护的成员应该可以从派生类访问。 那么,为什么我在下面的代码中出现编译错误?
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();
}
我注意到有一个相关的帖子,但那里的类有一个模板类。 我的只是一个"常规"类。
为什么派生类无法访问受保护的基类成员?
可以从派生类访问protected
成员,但只能通过派生类访问。
类的
protected
成员只能访问
- 。
- 成员
and friends (until C++17)
该类的任何派生类,但仅当通过其访问受保护成员的对象的类是该派生类或该派生类的派生类时:
因此,即使在派生类的成员函数中,也无法创建基类的独立对象。
换句话说,可以访问派生类的当前实例的protected
成员,但protected
独立基类的成员不能。
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
}
};
受保护的成员应该可以从派生类访问。
是的,但仅当通过this
指针访问时。在完整的单独对象上访问时不会。当B::g()
尝试构造一个新的A
对象时,您正在尝试执行此操作。
相关文章:
- 继承和友元函数,从基类访问受保护的成员
- C++:为什么无法在派生类中访问受保护的构造函数?
- 如何从其他结构访问受保护的结构变量
- 从模板化父类中的派生内部类访问受保护的成员变量
- 有没有办法通过 main 函数访问受保护的矢量大小而无需将其转换为公共?
- 在派生类的构造函数初始化中无法访问受保护的函数
- 无法通过指针或对象 c++ 访问受保护的成员
- C 继承访问受保护的数据成员
- 访问受保护的成员
- 尝试从基类访问受保护的构造函数时出现错误 C2248
- 如何通过运算符<<的重载访问受保护的功能?C++
- 从公共派生类访问受保护的成员
- Boost单元测试夹具继承测试类,是否可以访问受保护的方法
- 如果我使用强制转换访问受保护的成员,可能会出现什么问题?
- 通过继承访问受保护的成员
- 访问受保护的变量 - 继承和子类的复杂情况
- 为什么我无法从基类的实例访问受保护的成员?
- 访问受保护成员的公共方法
- 通过好友访问受保护的成员
- 从另一个类 C++ 访问受保护的函数