C++虚拟+受保护?

Spe*_*ral 1 c++ virtual class protected

在C++中,我有一个基类A,一个子类B.它们都有虚拟方法Visit.我想重新定义B中的"Visit",但是B需要访问每个A(以及所有子类)的"Visit"函数.

我有类似的东西,但它告诉我B不能访问受保护的A成员!但B也是A :-P

那么,我该怎么办?

class A
{
protected:
virtual Visit(...);
}

class B : public class A
{
protected:
vector<A*> childs;
Visit(...);
}

B::Visit(...)
{
 foreach(A* a in childs)
 {
   a->Visit(...);
 }
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Cas*_*Cow 9

您可以使用自己的对象访问受保护的成员,但是您可能无法使用备用对象访问受保护的成员,除非它也属于您的类(不仅仅是基类).

有一种解决方法,就像有一种解决方法,友谊不被继承.

在这个例子的任何情况下:

class A
{
protected:
  virtual void Visit(...);

  void visitOther( A& other, ... )
  {
     other.Visit(...);
  }
};



class B : public A
   {
       Visit(...);
       vector<A*> childs;
   };

   B::Visit(...)
    {
     BOOST_FOREACH( a, childs )
     {
         visitOther( *a, ... );
     }
   }
Run Code Online (Sandbox Code Playgroud)