C++调用公共基类的私有/受保护函数
在下面的示例中,是否有一种从 B::bar()
调用 A::foo()
的好方法?
class A {
protected:
void foo() {}
};
class B : public A {
public:
void bar(A& a) { // edit: called with &a != this
a.foo(); // does not work
}
};
除了声明 B
为 A
的友元之外,我想不出任何其他方法,但是如果有更多的类,这可能会变得非常难看。
有什么想法吗?
Is there a nice way to call A::foo()
from B::bar()
in the following sample?
class A {
protected:
void foo() {}
};
class B : public A {
public:
void bar(A& a) { // edit: called with &a != this
a.foo(); // does not work
}
};
I can't think of anything other than declaring B
to be a friend of A
, but that could get pretty ugly with some more classes.
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
是的,您可以使用基类函数。
Yes, you can use a base-class function.
为什么要传递 A 类型的对象?你可以这样做:
或者,像这样
Why are you passing object of type A? You could do like this :
or, like this
这是一种提供“受保护”访问权限的方法,允许任何派生类或对象进行调用。
它使用受保护的令牌类型,需要解锁特权方法:
这不是我的想法。我在某个地方读过它。抱歉,我不记得这是谁的狡猾主意了。
我希望编译器可以省略 aKey 参数。
Here's an approach to giving "protected" like access, allowing calls by any derived classes or object.
It uses a protected token type, required to un-lock privileged methods:
This is not my idea. I read it some place. Sorry I dont recall who's cunning idea it was.
I expect the compiler can elide the aKey parameter.