在以下示例中,有没有一种好的方式可以从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
的友元,但如果有更多的类的话,这种方法可能会变得非常混乱。你有什么其他的想法吗?
B::bar
需要调用A::foo
?如果A::foo
是受保护的,那就意味着只有类型为A
和任何派生自A
的类型的对象才能调用它。如果你真的需要从一个无关的类中调用A::foo
,也许它不应该被保护。 - James McNellisB
是A
类型时,将A
实例传递给B
的原因是什么? - wkl*this
上使用B::bar
,而是在其他实例上使用(实际上是在 A 的其他子类上使用)。A::foo()
有其保护的原因,我正在编写一个库,不希望开发人员使用它。 - lucas clemente