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)
谢谢
您可以使用自己的对象访问受保护的成员,但是您可能无法使用备用对象访问受保护的成员,除非它也属于您的类(不仅仅是基类).
有一种解决方法,就像有一种解决方法,友谊不被继承.
在这个例子的任何情况下:
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)