为什么我不能从派生类的实例访问受保护的成员?

Rom*_*n M 13 c++ inheritance

我有一段时间没有完成C++,也无法弄清楚为什么以下不起作用:

class A {
protected:
  int num;
};

class B : public A {
};

main () {
  B * bclass = new B ();
  bclass->num = 1;
}
Run Code Online (Sandbox Code Playgroud)

编译它会产生:

错误C2248:'A :: num':无法访问在类'A'中声明的受保护成员

派生类不应该访问受保护的成员吗?

我错过了什么?

osc*_*kuo 33

是受保护的成员可以由派生类访问,但是您在main()函数中访问它,该函数位于层次结构之外.如果在B类中声明一个方法并访问num,那就没问题了.


jhu*_*ord 14

是的,派生类可以访问受保护的成员,但只能从类中访问.

例:

#include <iostream>

class A { 
   protected:
   int num;
};

class B : public A {    public:
   void printNum(){
      std::cout << num << std::endl;
   }

};

main () {
   B * bclass = new B ();
   bclass->printNum();
}
Run Code Online (Sandbox Code Playgroud)

将打印出的值num,但num可以在课堂内访问B.num必须被宣布为公开才能访问它bclass->num.


Jim*_*ett 9

它可以在B函数的范围内访问,但是您试图在main中访问它.


i_a*_*orf 7

但是你没有从派生类中访问它.你是从main()访问它.