gpt4 book ai didi

C++ 虚拟 + 保护?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:17:09 27 4
gpt4 key购买 nike

在 C++ 中,我有一个基类 A,一个子类 B。两者都有虚方法 Visit。我想在 B 中重新定义“访问”,但 B 需要访问每个 A(以及所有子类)的“访问”功能。

我有类似的东西,但它告诉我 B 无法访问 A 的 protected 成员!但是 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(...);
}
}

谢谢

最佳答案

您可以使用您自己的对象访问 protected 成员,但您不能使用替代对象访问 protected 成员,除非它也是您的类(不仅仅是基类)。

有一个变通办法,就像有一个不继承友元的变通办法一样。

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

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

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



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

B::Visit(...)
{
for( auto a : childs )
{
visitOther( *a, ... );
}
}

关于C++ 虚拟 + 保护?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4562678/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com